C++ 类包装和对齐
在GCC编译器中无参数调用C++ 类包装和对齐,c++,pragma,C++,Pragma,在GCC编译器中无参数调用#pragma pack()的对齐方式是什么 另外,我经常看到,当我们在创建对象时使用placement new时,类经常被打包。原因是什么?有必要这样做吗?第一部分,你可能会鲁莽地使用谷歌: 其次,有时可能需要控制类的二进制格式。您可能需要管理内存量和数据结构的实际二进制偏移量: struct { char c; int i; }; 根据机器类型和使用的pragma pack,可以使用8字节内存或5字节内存。对于第一部分,这是否意味着我可以从代码中取出#pr
#pragma pack()
的对齐方式是什么
另外,我经常看到,当我们在创建对象时使用
placement new
时,类
经常被打包。原因是什么?有必要这样做吗?第一部分,你可能会鲁莽地使用谷歌:
其次,有时可能需要控制类的二进制格式。您可能需要管理内存量和数据结构的实际二进制偏移量:
struct
{
char c;
int i;
};
根据机器类型和使用的pragma pack,可以使用8字节内存或5字节内存。对于第一部分,这是否意味着我可以从代码中取出#pragma pack()?取决于代码。如果代码中没有其他pragma包,则是感谢回复。假设我在一个.h文件中有多个类声明,这是否意味着如果我在一个特定类之前设置了#pragma pack(1),那么#pragma pack(1)下面的所有类都会使用它?所以我需要将其设置回#pragma pack()?在其他.h文件中声明的类如何?这是正确的。pragma pack()在编译器找到后生效,并在编译运行期间保持活动状态,之后所有包含的文件也是如此。因此,如果只希望打包一个类,则在类声明之前打包#pragma pack(1),之后打包#pragma pack()。在SeNeNoTo:只有在真正需要时才使用PrimaPACK,因为它会对执行速度产生影响(OK,不显著),如果你发现答案有用,考虑接受或支持答案;