__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.


Anmelden zum Antworten