问题描述
|
#pragma pack(push)
#pragma pack(1)
我下载了一个教程,它在头文件中包含这些行。
如果您能为我提供与此相关的任何教程或参考,我将不胜感激。
解决方法
微软的解释:
http://msdn.microsoft.com/zh-CN/library/aa273913(v=vs.60).aspx
IBM的AIX xlC解释:
http://publib.boulder.ibm.com/infocenter/comphelp/v8v101/index.jsp?topic=%2Fcom.ibm.xlcpp8a.doc%2Fcompiler%2Fref%2Frnpgpack.htm
基本上,它确定存储结构或联合时将使用的字节边界。推送/弹出是一种在堆栈上存储和检索这些设置的方法。
为了将来参考,您可以通过在网络上搜索要查询的关键字来节省一些时间。我要做的就是找到此信息,只是在http://www.google.com上搜索\“ pragma pack \”
, 所有“ 1”陈述都是特定于供应商的。
这是Microsoft特有的,它描述了编译器可以增加多少个“打包”(以字节为单位)到2个字节,以便更好地对齐。
#pragma pack(push)
会将先前的设置保存到堆栈中。然后,您可以更改特定代码块的打包条件,稍后在#pragma pack(pop)
上可以恢复以前的设置。
, 这是MSVC ++专用的包装说明符。您可以从文档中确切地了解它的作用。
打包更改了允许编译器在给定结构(或类)的数据成员之间插入多少填充以保持对齐。在使用网络代码的情况下,可能会使用“ 5”说明符,以便可以将结构强制转换为“ 6”或“ 7”以传递给某个网络API,以一次通过网络发送整个结构。
(请注意,这是不安全的,因为不同的计算机具有不同的对齐和字节顺序规则;仅当电线两端的两台计算机使用相同的硬件类型时,此方法才有效)