InterlockedIncrement usage

16,357

It depends on your compiler settings. However, by default, anything eight bytes and under will be aligned on a natural boundary. Thus an "int" we be aligned on a 32-bit boundary.

Also, the "#pragma pack" directive can be used to change alignment inside a compile unit.

I would like to add that the answer assumes Microsoft C/C++ compiler. Packing rules might differ from compiler to compiler. But in general, I would assume that most C/C++ compilers for Windows use the same packing defaults just to make working with Microsoft SDK headers a bit easier.

Share:
16,357

Related videos on Youtube

Kiran Kumar
Author by

Kiran Kumar

Software developer from Bangalore, my area of interest is mainly C++. 33rd to C++ Gold Badge

Updated on April 15, 2022

Comments

  • Kiran Kumar
    Kiran Kumar about 2 years

    While reading about the function InterlockedIncrement I saw the remark that the variable passed must be aligned on a 32-bit boundary. Normally I have seen the code which uses the InterlockedIncrement like this:

    class A
    {
     public:
       A();
       void f();
    
     private:
      volatile long m_count;
    };
    
    A::A() : m_count(0)
    {
    }
    
    void A::f()
    {
      ::InterlockedIncrement(&m_count);
    }
    

    Does the above code work properly in multi-processor systems or should I take some more care for this?