是否有一种方法可以使用编译器标志在 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 是 16 字节对齐的,使其为 0x20(32) B 也是 16 字节对齐,但在 GCC 上也是 0x20(32),但在 msvc 上它是 0x30(48)
有没有办法强制msvc像GCC一样打包数据?
原因:我创建数据并将其直接加载到不同平台上的类中。 如果我可以在两个平台上使用完全相同的数据布局,那就太好了。 (是的,两个平台上的字节序是相同的)
添加#pragma pack(push, 4) / #pragma pack(pop) 围绕 A 类和 B 类成功地正确对齐数据,就像 GCC 对齐它一样。
请注意,如果继承被扩展,似乎任何需要对齐的类以及通过继承的转发都需要打包。 示例类 A、B、C、D、E、F C 已对齐成员 C、D、E、F 都需要它们周围的包。