cast: struct ptr in void* + referenzieren



  • Afaik ist definiert, daß die Member in der Reihenfolge ihrer Definition im Speicher liegen - d.h. f.d hat die selbe Adresse wie f

    was ist mit Padding? ...kann das auch am anfang eingefuegt werden? bisher habe ich nur folgendes gelesen: Structure padding is, adding extra bits at the end

    cu



  • Normalerweise nicht. Schließlich dient das Padding ja dazu, die "hinteren" Member auf korrekte Speicheradressen auszurichten. Und der Anfang des structs steht ja schon auf einer richtigen Adresse, also muß er nicht noch zusätzlich ausgerichtet werden.



  • Padding kann zwischen den Membern und zwischen dem letzten Member bis zur nächsten Struktur (z.B. in einem Array) auftreten. Zudem sind die Positionen (Reihenfolge) der einzelnen Member innerhalt der Struktur nicht festgelegt. Lediglich der erste Member ist sicher.

    <pedantic> rein theoretisch kann es sogar padding-Bits innerhalb eines Integers oder sowas geben </pedantic>



  • steht das alles im ansi c standard? oder wo lest ihr das nach?



  • Ja, etwas versteckt und verschlüsselt, aber ja 😉



  • TactX schrieb:

    Zudem sind die Positionen (Reihenfolge) der einzelnen Member innerhalt der Struktur nicht festgelegt.

    doch. ich glaub' das ist festgelegt.



  • net schrieb:

    TactX schrieb:

    Zudem sind die Positionen (Reihenfolge) der einzelnen Member innerhalt der Struktur nicht festgelegt.

    doch. ich glaub' das ist festgelegt.

    ja, reihenfolge muss gleich bleiben.

    aber padding bytes koennen eingefuegt werden.

    deshalb sind C strukturen auf fuer IPC und aehnliches verwendbar - man "packt" sie einfach auf 0 padding bytes (durch eine compiler anweisung) und schon kann man die strukturen problemlos in anderen programmen wieder auslesen...



  • Shade Of Mine schrieb:

    net schrieb:

    TactX schrieb:

    Zudem sind die Positionen (Reihenfolge) der einzelnen Member innerhalt der Struktur nicht festgelegt.

    doch. ich glaub' das ist festgelegt.

    ja, reihenfolge muss gleich bleiben.

    Jo, sorry. Hab's grad nachgelesen. Keine Ahnung wo ich das herhab 😕



  • TactX schrieb:

    Keine Ahnung wo ich das herhab 😕

    das ist wohl diese allgemeine unsicherheit bei vielen c-codern. wenn so vieles undefiniert ist in C, warum sollten dann ausgerechnet die reihenfolge der struct-member festgelegt sein?



  • Kann schon sein. Aber ich bin mir ziemlich sicher, dass mir das schonmal jemand gesagt hat. Naja, wayne...


Anmelden zum Antworten