__declspec(align(64))
-
Hi,
was bringt mir __declspec(align(128))??? Performace? Kleinere Exe oder was?
__declspec(align(128)) class foo { public: unsigned int x; unsigned int y; __forceinline void xy (unsigned int _x, unsigned int _y) { x = _x; y = _y; } };
-
gar nix!
es bringt nur alignment. und das haste eh, denn der compiler kennt die typen, die in dem speicher liegen.
anderster sieht es hier aus:char data[sizeof(Foo)];//global und nur 1-aligned!, weil char 1-aligned ist. bool fooInited=0;//auch 1-aligned, aber egal. Foo* getTheOneAndOnlyFoo(){ if(!fooInited){ new(data)Foo; inited=true; } return reinterpret_cast<Foo*>data; }
wenn du hier nicht __declspec(align(alignof(Foo)) ans data machst, kannst evtl ein falsch (zu klein) alignetes Foo kriegen! ist harmlis bei intel-32-bit-prozessoren. halt ein wenig lahmer als nötig.
auf 64-bittern wirds aber ultra-grausam. je nach einstellung wir ddie kiste entweder gleich abstürzen oder dich mit bis zu 54000% performanceinbruch bestrafen.