#pragma pack(push,8)无法正常工作

时间:2016-03-16 20:25:34

标签: c++ visual-c++ memory-alignment pragma

我使用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字节对齐工作?

0 个答案:

没有答案