Struktur größer als Inhalt?
-
Hi,
mir ist eben etwas sehr interessantes aufgefallen wo ich absolut keinen Peil sehe, warum das so ist.
Also: Ich habe eine Struktur mit dem Namen 'item'. In ihr sind zwei char-Arrays der Breite von 13 und 9, und ein long (Größe 4 Byte).
Das ergibt bei meinem Kopfrechnen eine größe von 26 Byte. Denkste!
Hab ein Programm geschrieben um mich selbst zu überzeugen und versteh den Sinn dahinter nicht

#include <iostream> struct item { char name[13]; long size; char buffer[9]; }; #define showSize(x) std::cout << #x << " : " << sizeof(x) << std::endl; int main (void) { item temp; showSize(temp.name); showSize(temp.size); showSize(temp.buffer); std::cout << "Total: " << sizeof(temp.name) + sizeof(temp.size) + sizeof(temp.buffer) << std::endl << std::endl; std::cout << "---" << std::endl; showSize(item); showSize(temp); std::cin.get (); return 0; }Ausgabe:
temp.name : 13
temp.size : 4
temp.buffer : 9
Total: 26
---
item : 32
temp : 32WARUM ist die Struktur nicht 26 groß sondern 32?? Und wie kann ich es hinbekommen das die Struktur 26 Byte groß ist?
p.s.: Ich benutze Visual C++ Express
-
Damit der Prozessor schneller auf die Elemente zugreifen kann.
-
hmmmmmmmmmmm schrieb:
Damit der Prozessor schneller auf die Elemente zugreifen kann.
Reseviert er 6 Byte für??
-
struct item { char name[13]; // <- 16 long size; // <- 4 char buffer[9]; // <- 12 };
-
Schau mal nach dem Stichwort "Alignment" in der ForumSuche/Google in dem zusammenhang. Danach kann z.B. ein char nicht ein byte beanspruchen, sondern plötlich 4, damit der prozessor auf die folgende variable schneller zugreifen kann...

-
@OnlyFoo-Silvester
kann man denn die struktur auf diese größe ausrichten? mir geht es ja nicht um speed
-
Nicht mit Standard C++ sondern mit Compiler-Optionen oder speziellen Anweisungen.
-
Kannst in den Einstellungen normalerweise das Alignment deaktivieren.