Hallo,
mir ist aufgefallen, dass eine einheitliche Erschaffung von Daten, für 32bit sowie 64bit Systeme, gar nicht so einfach ist wie gedacht. Natürlich hab ich ganz brav für eine "sichere" einheitliche Größe der Daten sowas wie std::int64_t genutzt, bei doubles und bool passt es wohl naturgemäß.
ABER nun das interessante (zumindest für mich): Packe ich verschiedene Daten (welche selber bei 32+64bit die exakt gleiche sizeof() besitzen) in ein Struct:
2x bool
5x double
2x std::int64_t
und erstelle einen Vector mit Datentyp des Structs dann:
32bit:
Das sich trotz gleichem Inhalt sogar das Struct von der Größe unterschiedet hat mich tatsächlich überrascht.
Jetzt wäre die Frage was wäre die Alternative zu einem vector mit struct um bei 32 und 64 bit die gleichen Größen zu erreichen?
Grüße
ps: ok liegt wahrscheinlich am padding aber wie bekommt man das "sicher" auf einen Nenner?
mir ist aufgefallen, dass eine einheitliche Erschaffung von Daten, für 32bit sowie 64bit Systeme, gar nicht so einfach ist wie gedacht. Natürlich hab ich ganz brav für eine "sichere" einheitliche Größe der Daten sowas wie std::int64_t genutzt, bei doubles und bool passt es wohl naturgemäß.
ABER nun das interessante (zumindest für mich): Packe ich verschiedene Daten (welche selber bei 32+64bit die exakt gleiche sizeof() besitzen) in ein Struct:
2x bool
5x double
2x std::int64_t
und erstelle einen Vector mit Datentyp des Structs dann:
32bit:
- sizeof(struct) = 60 byte
- sizeof(vector(struct)) = 12 byte
- sizeof(struct) = 64 byte
- sizeof(vector(struct)) = 24 byte
Das sich trotz gleichem Inhalt sogar das Struct von der Größe unterschiedet hat mich tatsächlich überrascht.
Jetzt wäre die Frage was wäre die Alternative zu einem vector mit struct um bei 32 und 64 bit die gleichen Größen zu erreichen?
Grüße
Ergänzung ()
ps: ok liegt wahrscheinlich am padding aber wie bekommt man das "sicher" auf einen Nenner?
Zuletzt bearbeitet: