当前位置: 技术问答>linux和unix
关于字节最齐的默认值问题
来源: 互联网 发布时间:2017-02-28
本文导语: 请问VS 和 gcc中的字节对齐的默认值是根据什么设的? 个人怀疑与CUP的指令位数有关,实验结果如下: 64位处理器,32位win7系统 测试VS2010环境,默认值是8字节对齐。 64位处理器,64位CentOS系统 //虚拟机上装的 测...
请问VS 和 gcc中的字节对齐的默认值是根据什么设的?
个人怀疑与CUP的指令位数有关,实验结果如下:
64位处理器,32位win7系统
测试VS2010环境,默认值是8字节对齐。
64位处理器,64位CentOS系统 //虚拟机上装的
测试gcc-4.4.1,默认值是8字节对齐
又没人确切知道的,或者能不能提供32位机器上的实验数据
个人怀疑与CUP的指令位数有关,实验结果如下:
64位处理器,32位win7系统
测试VS2010环境,默认值是8字节对齐。
64位处理器,64位CentOS系统 //虚拟机上装的
测试gcc-4.4.1,默认值是8字节对齐
又没人确切知道的,或者能不能提供32位机器上的实验数据
|
是与指令位数有关
贴一下之前收录的3个原则
字节对齐的三个原则
1) 结构体变量的首地址能够被其最宽基本类型成员的大小所整除
2) 结构体每个成员相对于结构体首地址的偏移量(offset)都是成员大小的整数倍,如有需要编译器会在成员之间加上填充字节(internal adding)
3) 结构体的总大小为结构体最宽基本类型成员大小的整数倍,如有需要编译器会在最末一个成员之后加上填充字节(trailing padding)
贴一下之前收录的3个原则
字节对齐的三个原则
1) 结构体变量的首地址能够被其最宽基本类型成员的大小所整除
2) 结构体每个成员相对于结构体首地址的偏移量(offset)都是成员大小的整数倍,如有需要编译器会在成员之间加上填充字节(internal adding)
3) 结构体的总大小为结构体最宽基本类型成员大小的整数倍,如有需要编译器会在最末一个成员之后加上填充字节(trailing padding)
|
糊涂了, 这样看不出来, 应该是struct a {long long b;};