Oth*_*oun 5 c++ string gcc padding packed
我刚刚了解了填充,我试图对其进行一些测试,我尝试打包这个结构:
struct B {
int a,b,c;
string s;
char x;
string t;
char y;
string u;
}__attribute__((packed)) ;
Run Code Online (Sandbox Code Playgroud)
但我收到这个警告:
warning: ignoring packed attribute because of unpacked non-POD field 'std::string B::u'
string u;
Run Code Online (Sandbox Code Playgroud)
这是否意味着包含的结构strings不能被打包?还有其他方法吗?如果是的话,会影响性能吗?
一个好的经验法则是将成员从最大到最小进行排序。这样您的数据就会对齐并且(通常)没有间隙。例如,在 VS2013 上,对于 x64 目标,以下布局需要 112 而不是 128 字节:
struct B {
string s,t,u;
int a,b,c;
char x,y;
};
Run Code Online (Sandbox Code Playgroud)
然而,对于 x86 目标,这只能节省 4 个字节。这是否以及如何影响您的表现取决于许多其他因素,只能通过测量来确定。
| 归档时间: |
|
| 查看次数: |
2018 次 |
| 最近记录: |