我有一个使用#pragma pack(push,8)的代码,但它似乎没有以某种方式生效,但我无法弄清楚是什么导致了这个问题。
例如,请查看以下代码。
#include <windows.h>
#include <stdio.h>
#pragma pack(push, 8)
typedef struct _MY_DATA {
LARGE_INTEGER a;
LARGE_INTEGER b;
ULONG count;
} MY_DATA;
#pragma pack(show)
#pragma pack(pop)
int main()
{
MY_DATA data;
printf("data size:%d\n", sizeof(data));
return 0;
}
这将返回“数据大小:24”但我在Visual Studio管理的其他应用程序中使用相同的代码,并且我得到“数据大小:20”。
所以我假设它与某些设置有关,但无法弄清楚。如果有人能给我一些暗示,我将非常感激。感谢。
答案 0 :(得分:2)
项目默认设置的优先级高于编译指示 - 请参阅this MSDN article。
结构打包与编译器对齐行为交互如下。
- 如果将packize设置为等于或大于默认对齐方式,则忽略packsize。
- 如果将packize设置为小于默认对齐,则编译器将根据packsize值进行对齐。