我刚刚学习了填充,我试图对它进行一些测试,
我试图打包这个结构:
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;
这是否意味着包含字符串的结构不能被打包?还有其他办法吗?如果是这样会影响性能?
最佳答案 一个好的经验法则是将您的成员从大到小排序.这样,您的数据就会对齐,并且(通常)没有差距.例如.在VS2013上对于x64目标,以下布局需要112而不是128字节:
struct B {
string s,t,u;
int a,b,c;
char x,y;
};
但是对于x86目标,这只能节省4个字节.是否以及如何影响您的表现取决于许多其他因素,它只能通过测量来确定.