Bitte helf mir folgender Code bringt mich zur Verzweiflung: Bei mir kommt jedesmal 16 als Größe raus. Nach meinen Berechnungen müsste aber eigentlich 2+4+2+2+4=14 nicht 16.
THX für die schnelle Antwort. Aber:ein array mit der Größe 2 hat die Felder 0 und 1, also 2; 100%. sizeof(unsigned char[2])=2Dieser Post wurde am 14.06.2004 um 20:24 Uhr von bürgi editiert.
Das liegt daran, dass der Compiler Lücken lassen und die Member so ausrichten darf, dass der Zugriff optimal schnell erfolgt. Normalerweise spielen diese blinden Bytes keine Rolle, und der Performancegewinn kann erheblich sein.
Für vorgeschriebene Speicherlayouts (Bitmap-Header und so) gibts Compileroptionen, mit denen man eine bestimmte Ausrichtung erzwingen kann. Welchen Compiler benutzt du?
Und bla nachher durch nen hexviewer gejagt. Das Ergebnis war:
Code:
00000000 61 00 16 40 f0 01 f0 01 12 34 56 78 de ad be ef a..@.....4Vx....
Da hast du die zwei überschüssigen, direkt hinter bfType. Den Grund hat ao schon genannt. -- Einfachheit ist Voraussetzung für Zuverlässigkeit. -- Edsger Wybe DijkstraDieser Post wurde am 14.06.2004 um 20:39 Uhr von 0xdeadbeef editiert.
Hmm nach einigen Spielen denke ich es ist ne Optimierung. Wenn man nur ein char in das struct steckt (auch array) dann erkennt er die Größe. Steckt man aber noch was mit rein was 4 Bit groß ist, zb long, dann versucht er immer auf gane vielfache von 4 Byte zu gehen. Ich habe testweise mal 5 char in das Array gesteckt und siehe da er geht auf 20 hoch. Ich habe es auch nicht geschafft diese Optimierung zu deaktivieren .
Ich habe jetzt nicht genau getestet ab wann er die Optimierung einschaltet. also was passiert wenn man 2 Array's im struct hat, aber jetzt weißt du was es ist und kannst ja selbst bissel testen