分类: LINUX
2009-08-02 23:01:24
gcc对齐规则(如果有什么错误,请高手指出):
(unsigned)char使用一字节对齐
|
上面的代码在linux下将打印 3
任何2字节大小的数据类型(比如short)的对齐模数是2,
|
上面的代码将打印 4.
而其它所有超过2字节的数据类型(比如long,double)都以4为对齐模数。
|
上面的代码将打印 24
内存中存储图示为(括号内为占用字节数)
a(1)+填充(3)+b(8)+c(1)+填充(3)+d(4)+e(2)+填充(2)=24
很显然,这里有一个问题。即需要在最后填充字节满足某一个位数的倍数。这个位数就是数值中的最大字节数。上面的代码中结构node包含需要以4字节对齐的double和int类型。,所以short e后面需要填充两一个字节满足4的倍数。
|
上面的代码将打印 32.显然node也是以4字节对齐。
windows下对齐有些差异。大于等于8字节的数据类型使用8字节对齐。
所以上面的代码在windows下执行将输出48.
其中node在内存中的图示为
a(1)+fill(7)+b(8)+c(1)+fill(3)+d(4)+e(2)+fill(6)=32
node1在内存中的图示为
a(1)+fill(7)+b(32)+c(2)+fill(6)=48.