3

使用 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 的位置生效还是在变量定义的位置生效?如果是后者,那么获得跨文件对齐的类型有什么好的解决方法?

4

1 回答 1

5

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

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

具体来说:

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

于 2011-11-10T05:56:08.227 回答