我使用Microsoft Visual Studio 2010和Windows 7 x64。我用C ++编写。
我有一个结构,我需要在x86和x64应用程序中正确访问它的字段。这就是我添加#pragma pack(push, 8)
的原因。结构如下:
#pragma pack(push, 8)
typedef struct
{
BOOL Inst;
HANDLE hEvent;
HANDLE hModuleMemory;
DWORD dwModuleSize;
HANDLE hFileMemory;
DWORD dwFileSize;
}
INIT_DATA, *LPINIT_DATA;
#pragma pack(pop)
但这不能按预期工作;对齐是x86中的4个字节。例如,此代码:
DWORD dwOffset = offsetof(INIT_DATA, hEvent);
DWORD dwSize = sizeof(INIT_DATA);
DebugPrint(DEBUG_INFO, "dwOffset = %d; dwSize = %d\n", dwOffset, dwSize);
输出:
[INFO] <main.cpp:572 TID:51536 ERR:0> WinMain(): dwOffset = 4; dwSize = 24
如果我将包装更改为#pragma pack(push, 4)
输出仍然相同!
如何才能使8字节对齐工作?