2

做什么

语用包(2)

做?这是什么意思?

4

4 回答 4

3

这意味着结构、联合或类按 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。重要提示:阅读问题并仅在您知道自己在做什么并且需要它时使用它;-)

于 2011-03-25T08:49:15.107 回答
1

这是一个特定于 Visual Studio 的pragma指令,用于更改structs 中成员的对齐方式。可以在 MSDN 上找到完整的详细信息,但它的要点是它允许您自定义在 a 的元素之间放置多少填充struct。将东西包装得更紧会占用更少的空间,但会给您带来对齐问题。

于 2011-03-25T08:49:25.250 回答
0

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

struct Foo {
  char c1;
  int i1;
};

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

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

请注意,所有编译指示都是特定于编译器的——尽管这个编译指示同时适用于 VC 和 gcc。

于 2011-03-25T08:50:44.387 回答
0

这意味着在结构的第一个成员之后的编译指示之后声明的结构、类或联合的每个成员都存储在成员类型大小或 2 字节边界的倍数处,以较小者为准。

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

如果您在文件级别使用它,那么在更改包装对齐之前保存包装对齐并在您要应用新包装对齐的声明结束时将其恢复为之前的值可能是一个好主意。

当然,您应该查看编译器的文档。

对于 MS VS 6.0:请参见此处

于 2011-03-25T08:55:05.913 回答