打包包含字符串的结构

时间:2015-04-03 07:57:10

标签: c++ string gcc padding packed

我刚刚了解了填充,我试图对它进行一些测试, 我试图打包这个结构:

struct B {
        int a,b,c;
        string s;
        char x;
        string t;
        char y;
        string u;

}__attribute__((packed)) ;

但是我得到了这个警告:

warning: ignoring packed attribute because of unpacked non-POD field 'std::string B::u'
      string u;

这是否意味着包含strings的结构不能被打包?还有其他办法吗?如果是这样会影响性能?

1 个答案:

答案 0 :(得分:2)

一个好的经验法则是将您的成员从大到小排序。这样,您的数据就会对齐,并且(通常)没有差距。例如。在VS2013上对于x64目标,以下布局需要112而不是128字节:

struct B {  
    string s,t,u; 
    int a,b,c;    
    char x,y;
};

但是对于x86目标,这只能节省4个字节。是否以及如何影响您的表现取决于许多其他因素,它只能通过测量来确定。