2011-05-05 57 views
1

在GCC编译器中调用#pragma pack()时没有参数的对齐方式是什么?分类包装和对齐

此外,我经常看到,当我们使用placement new创建对象时,class经常被打包。这是什么原因?是否有必要这样做?

回答

2

的第一部分,你可能会不顾一切地使用谷歌:http://gcc.gnu.org/onlinedocs/gcc/Structure_002dPacking-Pragmas.html

其次有可能是当你需要控制你的类的二进制格式。您可能需要管理的存储器和所述量的数据结构的实际二进制偏移:

struct 
{ 
    char c; 
    int i; 
}; 

可使用8个字节的存储器或5个字节的内存,根据机器类型和编译包使用。

+0

对于第一部分,这是否意味着我可以从代码中取出#pragma pack()? – leslieg 2011-05-05 04:16:39

+0

取决于代码。如果代码中没有其他的杂注包,是 – 2011-05-05 04:21:19

+0

感谢您的回复。假设我在一个.h文件中有多个类声明,这是否意味着如果在特定类之前设置#pragma pack(1),#pragma pack(1)下面的所有类都会使用它?所以我需要将其设置回#pragma pack()?如何在其他.h文件中声明类? – leslieg 2011-05-05 04:29:28