c++ - #pragma pack、模板类型定义和结构对齐

标签 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 的地方生效还是在变量定义的地方生效?如果是后者,获得跨文件对齐一致的类型的好的解决方法是什么?

最佳答案

在您的代码中,#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/

相关文章:

c++ - 目标文件中未解析的外部符号

c++ - C++指针,输出

c++ - 如何使用指向静态成员函数的函数指针作为模板参数?

c++ - 强制 CMake 将 C++ 编译器用于带有 Visual Studio 的 C 文件

wpf - 设置 wpf 数据网格的样式

C++函数接受函数指针和非静态成员函数作为参数

c++ - 在 CDialog 中应用按钮

c++ - 什么时候应该在模板函数中使用 typename?

c++ - `pthread`的run函数如何修改外部变量?

templates - 如何将PrestaShop 1.7结帐 Accordion 步骤转换为步骤进度条?