#pragma pack,template typedef和struct alignment

时间:2011-11-10 05:42:56

标签: c++ templates visual-c++ gcc memory-alignment

使用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的结构对齐方式是什么?也就是说,对于typedef的模板类,pragma pack是在typedef的位置还是在变量定义的位置生效?如果是后者,那么获得跨文件一致对齐类型的好方法是什么?

1 个答案:

答案 0 :(得分:4)

在您的代码中,#pragma pack无效。它只对结构或类的定义有效,而不是在typedef或任何东西周围。它也不会对变量定义产生任何影响。

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

具体做法是:

  

pack在看到pragma之后在第一个struct,union或class声明生效。 pack对定义没有影响。