#pragma pack,模板类型和结构对齐

#pragma pack, template typedefs, and struct alignment

本文关键字:结构 对齐 类型 pack #pragma      更新时间:2023-10-16

使用Visual Studio或gcc,如果我有

#pragma pack(push, 16)
typedef std::map<uint32_t, uint32_t> MyIntMap;
#pragma pack(pop)

之后:

#pragma pack(push, 8)
MyIntMap thisInstance;
#pragma pack(pop)

thisInstance的结构对齐是什么?也就是说,对于一个类型定义的模板类,pragma pack是在类型定义的位置生效还是在变量定义的位置生效?如果是后者,获得跨文件一致对齐的类型的好方法是什么?

在您的代码中,#pragma pack将不起作用。它只在结构或类的定义周围有效时才做任何事情,而不是在类型定义或其他东西周围。对于变量的定义也没有任何影响。

您可以在这里看到用法:http://msdn.microsoft.com/en-us/library/2e70t5y1(v=VS.100).aspx

专:

pack在看到编译后的第一个结构、联合或类声明时生效。包对定义没有影响。