2

我有一个使用 #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”。

所以我假设它与某些设置有关,但无法弄清楚。如果有人能给我一些提示,我将不胜感激。谢谢。

4

1 回答 1

2

项目默认设置的优先级可能高于 pragma - 请参阅此 MSDN 文章

结构打包与编译器对齐行为的交互如下。

  • 如果 packsize 设置为等于或大于默认对齐方式,则忽略 packsize。
  • 如果 packsize 设置为小于默认对齐方式,编译器将根据 packsize 值进行对齐。
于 2010-06-23T15:18:36.220 回答