Kann ich plattformübergreifende/Compiler-kompatible Strukturen sicher in Dateien lesen/schreiben?
Strukturen in C stellen eine Herausforderung für Cross- Plattformkompatibilität aufgrund möglicher Unterschiede in der Auffüllung zwischen Compilern. Diese Ungleichheit ergibt sich aus der fehlenden Standardisierung in C auf binärer Ebene.
Wie Don Box in seinem Buch „Essential COM“ erklärt, ist das binäre Laufzeitmodell von C nicht standardisiert. Daher können verschiedene Compiler unterschiedliche Padding-Ausrichtungen für Strukturen verwenden, selbst wenn derselbe Compiler mit unterschiedlichen Pragma-Pack-Direktiven verwendet wird.
Außerdem kann die Reihenfolge der Member-Deklaration innerhalb einer Struktur deren Größe beeinflussen, selbst wenn die Member bestehen bleiben identisch. Zum Beispiel:
struct A { char c; char d; int i; }; struct B { char c; int i; char d; };
Kompiliert mit gcc-4.3.4 unterscheiden sich die Größen von A und B trotz ihrer identischen Mitglieder:
Size of A: 8 Size of B: 12
Diese Ungleichheit macht es unmöglich, davon auszugehen, dass alle Compiler füllen Strukturen auf die gleiche Weise auf. Daher gibt es keine garantierte Methode zum sicheren Lesen/Schreiben von Strukturen in Dateien auf plattformübergreifende/compilerkompatible Weise.
Das obige ist der detaillierte Inhalt vonKann ich C-Strukturen sicher über verschiedene Plattformen und Compiler hinweg speichern und abrufen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!