#pragma包,模板typedef和结构对齐

ver*_*lop 3 c++ gcc templates memory-alignment visual-c++

如果有的话,使用Visual Studio或gcc

#pragma pack(push, 16)

typedef std::map<uint32_t, uint32_t> MyIntMap;

#pragma pack(pop)
Run Code Online (Sandbox Code Playgroud)

然后再:

#pragma pack(push, 8)

MyIntMap thisInstance;

#pragma pack(pop)
Run Code Online (Sandbox Code Playgroud)

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

Set*_*gie 5

在您的代码中,#pragma pack将无效。它仅在围绕结构或类的定义有效时才执行任何操作,而不是围绕typedef或其他任何操作。围绕该变量定义也不起作用。

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

特别:

在看到编译指示后,pack在第一个struct,union或class声明上生效。pack对定义没有影响。