Struktur ist 16 Byte Groß
-
typedef struct _PRJ3DFILEHEADER { char FileType[5]; int n_Vertex; int n_Indice; } PRJ3DFILEHEADER;Wenn ich mir das ausrechne:
2 x sizeof(int) = 8
8 + 5 = 13...
Der Compiler macht hier dennoch 16 Byte draus... gibt es da irgendein Schlüsselwort, welches genau dieses verhindert? Ich brauche hier in diesem Fall 13 Byte.Benutze den MsVC++ 7.0
MFG;
-
nein das geht nicht, weil der compieler immer nur mit 16 byte einheiten rechnen kann
Bedank dich bei intel&co wegen dem neuen 64er befehlssatz^^
-
Nein, das ist das Alignment.
"char FileType[5]" belegt 5 Byte, wird auf 8 aufgefüllt. Dann zwei int dazu sind 16 Byte. Dies nennt man Strukturausrichtung und kann in MSVC++ beeinflusst/abschaltet werden. Wie es mit anderen Compilern ist weiß ich nicht.
-
http://www.eventhelix.com/RealtimeMantra/ByteAlignmentAndOrdering.htm
Google: Compiler, Padding (bytes), (Byte) Alignment
Das kann man oft in den Optionen umstellen (bzw. per Parameter), sollte man aber nichtÜbrigens ist das bestimmt kein Nachteil, das macht die Sache schneller und auf die paar Bytes kann man im Normalfall verzichten. (anderst ist das z.B. bei embedded Systemen)
-
Nun ja, in diesem Fall ist das ein Fileheader, und da stören mich die 3 sinnlosen Byte. Bei anderen Strukturen ist es natürlich schön, das der Compiler das so macht, wegen der Geschwindigkeit...
MFG;
-
Ich verlasse mich bei Strukturen (Klassen) nicht darauf, wie groß sie ist und wie die Variablen angeordnet sind. Lieber manuell auslesen und dann Wert für Wert in das Objekt schreiben.
Wenn man dann noch schön Operatoren überläd kann das recht übersichtlich werden:
xFile >> h->uName >> (uint32&)h->eType >> h->uFlags >> h->uAddress >> h->uOffset >> h->uSize >> h->uLink >> h->uInfo >> h->uAddressAlign >> h->uEntrySize;