# pragma pack的含义(2)

xoshrz7s  于 2023-10-16  发布在  其他
关注(0)|答案(4)|浏览(180)

是什么

#pragma pack(2)

做什么?什么意思?

hmae6n7t

hmae6n7t1#

这意味着结构体、联合体或类按2个字节对齐。这意味着,下面的结构将在内存中使用3个字节而不是2个:

struct MyStruct
{
    char Field1;
    char Field2;
};

以下代码将使用4个字节:

struct MyStruct
{
    WORD Field1;
    WORD Field2;
};

更多信息:http://msdn.microsoft.com/en-us/library/2e70t5y1%28v=vs.80%29.aspx重要的是:阅读有关的问题,并使用它只有当你知道你在做什么,你需要它;- )

mi7gmzs6

mi7gmzs62#

这是一个特定于Visual-Studio的pragma指令,用于更改struct中成员的对齐方式。完整的细节可以在here on the MSDN中找到,但它的要点是它允许您自定义在struct的元素之间放置多少填充。把东西包得更紧会占用更少的空间,但会给你给予对齐问题。

koaltpgm

koaltpgm3#

这意味着编译器应该打包结构/类/联合成员,以便它们在2字节边界上对齐。

struct Foo {
  char c1;
  int i1;
};

使用pack(2),结构体将具有:

  • 1个字节用于字符
  • 1个未使用的字节,填充
  • 4个字节(假设为32位)用于int

请注意,所有的编译指示都是特定于编译器的--不过这个指示在VC和gcc上都可以工作。

vzgqcmou

vzgqcmou4#

这意味着在跟随结构的第一个成员的杂注之后声明的结构,类或联合的每个成员都存储在成员类型大小或2字节边界的倍数上,无论哪个更小。

pragma pack(n)将影响其后面的结构、类和联合的大小。

如果你在文件级别使用它,那么在改变它之前保存打包对齐可能是一个好主意,当你想应用新的打包对齐的声明结束时,把它恢复到以前的值。
当然你应该在编译器的文档中看看。
对于MS VS 6.0:请参见Here

相关问题