G
Gibt es eine Funktion mit der ich die tatsächliche Länge der Struktur erfragen kann?
sizeof gibt die tatsächliche Länge des von der Struktur verwendeten Speichers zurück. Was du sicherlich willst ist die gesamte Grösse aller einzelnen Elemente. Wie mady schon sagte gibt es dafür keine wirklich praktikable und portable Lösung. Zumindest sollte jeder Compiler eine Option für die Ausrichtung von Strukturvariablen mitbringen, beim MSC 6 ist das zB /Zp.
Zp8 ist Voreinstellung und würde laut Doku an 8-Byte Grenzen ausrichten. Leider ist hier die Doku etwas ungenau, denn eigentlich wird an 4-Byte Grenzen ausgerichtet. Das hat wohl damit zu tun, dass dies für eine 32 bit Plattform ausreicht. Lediglich Variablen, die grösser als 4 Byte sind, werden dann tatsächlich an 8-Byte Grenzen ausgerichtet.
Für den MSC gibt auch #pragma pack, was du direkt im Quellcode verwenden kannst:
#pragma pack(1)
typedef struct{
short a1;
short a2;
unsigned char a3;
} aa;
#pragma pack()
Hier wird jede Strukturvariable byteweise ausgerichtet und du bekommst für sizeof(aa) die tatsächliche Grösse aller Strukturvariablen.
Dennoch sei gewarnt:
die Veränderung der default Ausrichtung kann zu Problemen bei Verwendung von Libs führen, die mit einer anderen Ausrichtung kompiliert wurden
#pragma's zu verwenden ist relativ unportabel, da nicht alle von jedem Compiler gleich gut unterstützt werden
zu kleine Ausrichtungsgrenzen können zu Performance Verlusten führen
@<friend>
Was hat eine Strukturdefinition mit dynamisch reserviertem Heapspeicher zu tun ?
[ Dieser Beitrag wurde am 26.06.2003 um 09:31 Uhr von groovemaster2002 editiert. ]