2010-06-23 105 views
2

我有一個使用#pragma pack(push,8)的代碼,但它似乎沒有起作用,但我無法弄清楚是什麼導致了這個問題。什麼禁用#pragma pack(push)?

例如,看下面的代碼。

#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」。

所以我假設它必須做一些設置,但無法弄清楚。如果有人能給我一些提示,我會非常感激。謝謝。

回答

2

項目默認設置的優先級可能高於編譯指示 - 請參閱this MSDN article

結構打包與編譯器對齊行爲交互如下。

  • 如果將packsize設置爲等於或大於默認對齊方式,則將忽略packsize。
  • 如果將packsize設置爲小於默認對齊方式,則編譯器會根據packsize值進行對齊。