.| Autor | Beitrag |
|---|---|
|
000 09.10.2002, 19:42 Mazze |
Hi! Mir ist kein besseres Subject eingefallen... Es gab mal so ein Thread, in dem stand, dass mehr Speicher benötigt als: Ich weiß nur nicht mehr in welchem Thread das stand.... Das kam mir nun etwas komisch vor und ich war mir ziemlich sicher, dass das nur drauf ankommt, welchen Compiler man nimmt. Bei gcc kommt das hier: Was macht denn MSVC da für scheisse? thx BattleTech-MOD: |
|
Profil || Suche |
|
001 09.10.2002, 19:54 Archangel |
das kommt mir auch komisch vor, da ja die größe jedes datentypens aus den structs sich glatt durch 4 teilen lässt.. aber:
da dürfte struct a 12, struct b aber nur 8 bytes belegen, wegen 32 bit alignment.. aber mal auf gcc testen -- |
|
Profil || Suche |
|
002 09.10.2002, 20:41 Tron |
dass das erste groeser ist liegt daran, dass double auf 8 byte aligned wird
aber wie richtig erkannt, das kann der compiler machen, wie er magt, einzige bedingung: das erste element (hier int x) _muss_ bei position 0 anfangen. --'KEINE PANIK' - aus der Triologie in fuenf Baenden von Douglas Adams 'FÜR DEINN FERD' - aus 'Gevatter Tod' von Terry Pratchett Dieser Beitrag wurde am 09.10.2002 um 20:42 von Tron bearbeitet. |
|
Profil || Suche |
|
003 09.10.2002, 22:02 Diablo_bth |
das Byte-Alignment lässt sich (zumindes bei M$VC++) auch manuell einstellen und zwar über mit #pragma pack( 4 ) müssten beide struct auch bei MS die gleiche größe haben. damit der Compiler bei C++ nicht meckert kann man auch sowas hier machen:
|
|
Profil || Suche |
|
004 09.10.2002, 22:18 the_viking |
was soll das mit dem UNION { ... }; ? --thx, cu, MfG the_viking (( My =]=H=O=M=E=> Page! )) |
|
Profil || Suche |
|
005 09.10.2002, 23:35 TheTinySteini |
union haut alles auf den gleichen Speicherbereich. [edit] TheTinySteini Dieser Beitrag wurde am 09.10.2002 um 23:59 von TheTinySteini bearbeitet. |
|
Profil || Suche |
|
006 10.10.2002, 17:18 Mazze |
Naja. Also so ganz kapiert hab ich den Sinn von Byte-Alignment jetzt doch nicht. Aber die müssen doch nicht voll ausgenutzt werden, oder? Und wieso werden gerade x und z auf 8 Bytes gebracht und nicht z.b. m und f? Fragen über Fragen.... cu BattleTech-MOD: |
|
Profil || Suche |
|
007 10.10.2002, 17:27 dp Administrator |
pack gibts übrigens auch bei gcc, falls ich das richtig verstanden habe: Dieser Beitrag wurde am 10.10.2002 um 17:27 von Darth Paul bearbeitet. |
|
Profil || Suche |
|
008 10.10.2002, 18:40 Prefect |
Mazze: Alignment ist eben dann wichtig, wenn die Variablen nicht in den Bus passen. Du hast ja schon gesagt, der Bus hat eine gewisse Breite (und er wird immer breiter - der scheint gutes Zeug parat zu haben ;)). Angenommen, der Bus ist 64 Bit breit. Dann heißt das bei 99,99% der Architekturen auch, daß der Bus immer Speicher überträgt, der auf 8 Bytes ausgerichtet ist. D.h. in einem Speicherzyklus kannst du den 8Byte-Block von 0-7 oder von 8-15 übertragen, aber _nicht_ den von 4-11 oder von 7-14. cu, Widelands - Gemütliche Aufbaustrategie, Free Software |
|
Profil || Suche |
|
009 11.10.2002, 12:25 Mazze |
thx Jetzt hab ich das kapiert! cu BattleTech-MOD: |
|
Profil || Suche |

