GCC vs MSVC类包装和对齐

时间:2012-04-24 16:57:10

标签: visual-c++ gcc compiler-construction alignment

有没有一种方法可以使用编译器标志来创建msvc下基类和派生类的相同内存布局,而不是gcc中的等效内存布局?我使用VS2010并将其与GCC 4.1.1进行比较

所以

#if define _MSVC
// window 
DALIGN(A,B) __declspec(align(A)) B
#else
// GCC
DALIGN(A,B) B __attribute__((aligned(A)))
#endif
class A
{ 
  DALIGN(CVector V,16);
  int a;
}
class B : public A
{
  int b;
}

A是16byte对齐使它成为0x20(32) B也是16字节对齐,但在GCC上也是0x20(32)但在msvc上它是0x30(48)

有没有办法强制msvc像GCC一样打包数据?

原因:我创建数据并将其直接加载到不同平台上的类中。真正好的是,如果我可以在两个平台上使用完全相同的数据布局。 (两个平台上的yes端是相同的)

1 个答案:

答案 0 :(得分:2)

添加#pragma pack(push,4)/ #pragma pack(pop) 在GCC对齐时,A类和B类成功地正确对齐数据。

请注意,如果继承被扩展,似乎对于任何所需的对齐类并且通过继承转发都需要打包。 示例类A,B,C,D,E,F C已对齐成员 C,D,E,F都需要它们周围的包装。