如何确保成员是4字节对齐的?

gas*_*ard 3 c++ atomic memory-alignment

为了使用OSAtomicDecrement(特定于mac的原子操作),我需要提供一个4字节对齐的SInt32.

这种烹饪有用吗?有没有其他方法来处理对齐问题?

struct SomeClass {
  SomeClass() {
    member_  = &storage_ + ((4 - (&storage_ % 4)) % 4);
    *member_ = 0;
  }

  SInt32 *member_;

  struct {
    SInt32 a;
    SInt32 b;
  } storage_;
};
Run Code Online (Sandbox Code Playgroud)

Lir*_*una 5

如果你在Mac上,这意味着GCC.GCC可以为您自动对齐变量:

  __attribute__((__aligned__(4))) int32_t member_;
Run Code Online (Sandbox Code Playgroud)

请注意,这不适用于编译器,因为这是GCC特定的.

  • 这个解决方案的好处是什么,因为它不太便携(并且使用了额外的4个字节的空间)? (2认同)