Plattformübergreifende Bitfeldreihenfolge und -ausrichtung: Ein Mythos
Während die Reihenfolge der Bitfelder innerhalb einer Struktur plattformspezifisch erscheinen mag, Es bleibt die Frage, ob plattformspezifische Compiler-Packoptionen eine konsistente Datenspeicherung gewährleisten können.
Bedenken Sie Folgendes Szenario:
struct Message { unsigned int version : 3; unsigned int type : 1; unsigned int id : 5; unsigned int data : 6; } __attribute__ ((__packed__));
Auf einem Intel-Prozessor mit GCC werden die Felder wie geschrieben im Speicher angeordnet: Version zuerst, gefolgt vom Typ.
Eine plattformübergreifende Portabilität ist jedoch immer noch schwer zu erreichen . Packoptionen sind Compiler-Erweiterungen und nicht vollständig portierbar. Darüber hinaus heißt es in C99 §6.7.2.1, Absatz 10 ausdrücklich, dass die Reihenfolge der Bitfeldzuordnung (hochwertig zu niedrigwertig oder umgekehrt) durch die Implementierung definiert ist.
Sogar derselbe Compiler kann unterschiedliche Bitfelder aufweisen Layouts abhängig von der Endianness der Zielplattform. Daher ist es kein zuverlässiger Ansatz, sich auf Compiler-spezifische Packoptionen zu verlassen, um die plattformübergreifende Datenreihenfolge und -ausrichtung zu gewährleisten.
Das obige ist der detaillierte Inhalt vonGarantiert Compiler-Packung die plattformübergreifende Reihenfolge und Ausrichtung von Bitfeldern?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!