是什么
#pragma pack(2)
做什么?什么意思?
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重要的是:阅读有关的问题,并使用它只有当你知道你在做什么,你需要它;- )
mi7gmzs62#
这是一个特定于Visual-Studio的pragma指令,用于更改struct中成员的对齐方式。完整的细节可以在here on the MSDN中找到,但它的要点是它允许您自定义在struct的元素之间放置多少填充。把东西包得更紧会占用更少的空间,但会给你给予对齐问题。
pragma
struct
koaltpgm3#
这意味着编译器应该打包结构/类/联合成员,以便它们在2字节边界上对齐。
struct Foo { char c1; int i1; };
使用pack(2),结构体将具有:
请注意,所有的编译指示都是特定于编译器的--不过这个指示在VC和gcc上都可以工作。
vzgqcmou4#
这意味着在跟随结构的第一个成员的杂注之后声明的结构,类或联合的每个成员都存储在成员类型大小或2字节边界的倍数上,无论哪个更小。
如果你在文件级别使用它,那么在改变它之前保存打包对齐可能是一个好主意,当你想应用新的打包对齐的声明结束时,把它恢复到以前的值。当然你应该在编译器的文档中看看。对于MS VS 6.0:请参见Here。
4条答案
按热度按时间hmae6n7t1#
这意味着结构体、联合体或类按2个字节对齐。这意味着,下面的结构将在内存中使用3个字节而不是2个:
以下代码将使用4个字节:
更多信息:http://msdn.microsoft.com/en-us/library/2e70t5y1%28v=vs.80%29.aspx重要的是:阅读有关的问题,并使用它只有当你知道你在做什么,你需要它;- )
mi7gmzs62#
这是一个特定于Visual-Studio的
pragma
指令,用于更改struct
中成员的对齐方式。完整的细节可以在here on the MSDN中找到,但它的要点是它允许您自定义在struct
的元素之间放置多少填充。把东西包得更紧会占用更少的空间,但会给你给予对齐问题。koaltpgm3#
这意味着编译器应该打包结构/类/联合成员,以便它们在2字节边界上对齐。
使用pack(2),结构体将具有:
请注意,所有的编译指示都是特定于编译器的--不过这个指示在VC和gcc上都可以工作。
vzgqcmou4#
这意味着在跟随结构的第一个成员的杂注之后声明的结构,类或联合的每个成员都存储在成员类型大小或2字节边界的倍数上,无论哪个更小。
pragma pack(n)将影响其后面的结构、类和联合的大小。
如果你在文件级别使用它,那么在改变它之前保存打包对齐可能是一个好主意,当你想应用新的打包对齐的声明结束时,把它恢复到以前的值。
当然你应该在编译器的文档中看看。
对于MS VS 6.0:请参见Here。