有没有一种方法可以使用编译器标志来创建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端是相同的)
答案 0 :(得分:2)
添加#pragma pack(push,4)/ #pragma pack(pop) 在GCC对齐时,A类和B类成功地正确对齐数据。
请注意,如果继承被扩展,似乎对于任何所需的对齐类并且通过继承转发都需要打包。 示例类A,B,C,D,E,F C已对齐成员 C,D,E,F都需要它们周围的包装。