文章标题
2016-06-02 17:00
239 查看
数据对齐(align)
许多OS对基本数据类型合法地址做出了限制,要求某种类型对象的地址必须是某个值k(通常2、4、8)的倍数,以简化cpu与RAM之间的接口。
Linux的对齐策略是,2字节数据类型(short)的地址必须为2的倍数:short类型对象地址最低位必须等于0;而较大的数据类型(如int、float)的地址必须为4的倍数:int类型对象或指针地址最低两位必须是0。
IA32的一个惯例:确保每个栈帧的长度都是16字节的整数倍。
Windows对齐的要求:任何K字节基本对象的地址都必须是K的倍数,K=2,4,8。特别的要求一个double或者long long 类型的数据地址应该是8的倍数。
例子:
在Windows机器编译各字节的偏移量,以及重排序使空间最小。
许多OS对基本数据类型合法地址做出了限制,要求某种类型对象的地址必须是某个值k(通常2、4、8)的倍数,以简化cpu与RAM之间的接口。
Linux的对齐策略是,2字节数据类型(short)的地址必须为2的倍数:short类型对象地址最低位必须等于0;而较大的数据类型(如int、float)的地址必须为4的倍数:int类型对象或指针地址最低两位必须是0。
IA32的一个惯例:确保每个栈帧的长度都是16字节的整数倍。
Windows对齐的要求:任何K字节基本对象的地址都必须是K的倍数,K=2,4,8。特别的要求一个double或者long long 类型的数据地址应该是8的倍数。
例子:
在Windows机器编译各字节的偏移量,以及重排序使空间最小。
struct{ char *a; 0 short b; 4 double c; 8 char d; 16 float e; 20 char f; 24 long long g; 32 void *h; 40 }foo; =48 (整个struct最后8位对齐) 重排序后: struct{ long long g; 0 double c; 8 float e; 16 void *h; 20 char *a; 24 short b; 28 char d; 30 char f; 31 }foo; =32 (整个struct最后8位对齐)
相关文章推荐
- IIS集群+分布式缓存
- 使用VC++6.0 MFC OLE操作Excel 进行简单的读写
- 常用日期处理方法工具类
- 浅析java的浅拷贝和深拷贝
- wordpress通过$wpdb获取一个分类下所有的文章
- 补作业:随机生成二元四则运算
- C++ 常用的字符串处理函数实现
- leetcode 31. Next Permutation
- 邮件审批工作流实现方案
- 创建属于你的SDK!
- windows下openGLES 3.0 配合 vs 环境搭建(二)
- ubuntu设置自定义程序开机启动(本文以tomcat为例)
- 如果不知道MySQL当前使用配置文件(my.cnf)的路径的解决方法
- Linux命令:ps / top
- 分数类中的运算符重载
- 分数类中的运算符重载
- 分数类中的运算符重载
- 分数类中的运算符重载
- 分数类中的运算符重载
- excel导入ORACLE的四个方法