如何解决Linux / IA32下的数据对齐
我遇到两个结构:
struct s1{
int i;
int j;
char c;}
struct s2{
int i;
char c1;
int j;
char c2;}
教科书上说S1中的c仅占1个字节,而S2中的c2占4个字节,这为什么呢? 是因为c1必须占用4个字节,并且它们具有相同的类型?
解决方法
在i386 System V ABI的结构布局规则中,s1::c
后有3个填充字节,与s2::c1
之后有3个填充字节。 (以及大多数普通的ABI。)
要使数组起作用,总的结构大小必须是其alignof()
的倍数:连续内存中的结构,每个结构都占用sizeof(struct s1)
,而且每个结构的开始都必须对齐,以便int
个成员已对齐。
查看两种类型的sizeof()
和alignof()
以及int vs. char。按照ISO C的定义,sizeof(char)= 1,在i386 SysV中,sizeof(int)= alignof(int)= 4。
如果您有一个struct { char foo[8]; char c; };
,那么它的总大小将仅为9个字节,因为alignof(char)= 1。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。