使用 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 的地方生效还是在变量定义的地方生效?如果是后者,获得跨文件对齐一致的类型的好的解决方法是什么?
最佳答案
在您的代码中,#pragma pack
将无效。它只在围绕结构或类的定义生效时才做任何事情,而不是围绕 typedef 或其他任何东西。它对该变量定义也没有任何影响。
你可以在这里看到用法:http://msdn.microsoft.com/en-us/library/2e70t5y1(v=VS.100).aspx
具体来说:
pack takes effect at the first struct, union, or class declaration after the pragma is seen. pack has no effect on definitions.
关于c++ - #pragma pack、模板类型定义和结构对齐,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8075437/