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

プロジェクトの既定の設定は、プラグマよりも優先される場合があります。この MSDN の記事を参照してください。

構造体のパッキングは、コンパイラのアライメント動作と次のように相互作用します。

  • packsize がデフォルトのアラインメント以上に設定されている場合、packsize は無視されます。
  • packsize がデフォルトのアラインメントよりも小さく設定されている場合、コンパイラは packsize の値に従ってアラインします。
于 2010-06-23T15:18:36.220 に答える