C++ 类包装和对齐

C++ 类包装和对齐,c++,pragma,C++,Pragma,在GCC编译器中无参数调用#pragma pack()的对齐方式是什么 另外,我经常看到,当我们在创建对象时使用placement new时,类经常被打包。原因是什么?有必要这样做吗?第一部分,你可能会鲁莽地使用谷歌: 其次,有时可能需要控制类的二进制格式。您可能需要管理内存量和数据结构的实际二进制偏移量: struct { char c; int i; }; 根据机器类型和使用的pragma pack,可以使用8字节内存或5字节内存。对于第一部分,这是否意味着我可以从代码中取出#pr

在GCC编译器中无参数调用
#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,不显著),如果你发现答案有用,考虑接受或支持答案;