5

我刚刚了解了填充,我正在尝试对其进行一些测试,我尝试打包这个结构:

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不能被打包?还有其他方法吗?如果是这样会影响性能吗?

4

1 回答 1

3

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

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

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

于 2015-04-03T08:55:46.800 回答