深入理解计算机系统------->对齐限制笔记
来源:互联网 发布:win10 mac 编辑:程序博客网 时间:2024/06/04 21:47
对齐限制
c语言中在用sizeof()函数判断一个结构体类型(struct)所占字节大小的时候会发现它可能比理论上的所占字节大小要大。这是由于许多计算机系统对基本数据类型的 可允许地址做出了一些限制,要求某种类型的对象的地址必须是某个值k(通常是2,4,8)的倍数,这称为对齐限制。这种限制可以简化处理器和存储器系统之间的接口的硬件设计。
例子,假设一个处理器总是从存储器中取8字节数据,则地址必须为8的倍数。如果将所有的double类型的对象地址对齐成8的倍数,那么用一次的存储器操作就能完成读写操作。
当然无论数据是否对齐,计算机都能正确执行。对象的地址对齐是以空间换时间来提高处理效率。大多数编译器在编译的时候给出了是否对齐的选项。默认是对齐的。
Linux使用的对齐策略是2字节数据类型的地址必须是2的倍数,而较大的数据类型(int,int*,float,double)的地址必须是4的倍数。也就是要求一个short类型的地址的最低位必须等于0.而较大的数据类型的地址最低两位必须都是0.
注意Linux上可以使用命令行-malign-double使GCC为double类型的数据使用8字节的对齐方式,但在与用4字节对齐方式下编译的库代码链接时,会导致不兼容。
Windows对齐方式是,任何k字节基本对象的地址都必须是k的倍数。也就是说int类型的对象地址是4的倍数,double类型的对象地址是8的倍数。
所以合理的类型对象声明顺序会,节约内存空间。
例子:
typedef struct {int a;int b;char c; }s1;
根据对齐限制的要求,
s1占用9个字节的空间,但事实并非如此。如果s1类型的对象占9个字节的空间那么,对于对象s1 temp[2]。对象temp[1]地址为9的倍数,其中成员就不满足对齐限制的要求。所以s1类型的数据对象占用的空间是12个字节,以满足在数组类型下地址对齐的要求。
在理解了对齐限制后,就明白了结构体所占空间为逻辑不相等的原因。
- 深入理解计算机系统------->对齐限制笔记
- 深入理解计算机系统笔记
- 《深入理解计算机系统》笔记
- 深入理解计算机系统笔记
- 深入理解计算机系统笔记
- 【笔记】深入理解计算机系统
- 深入理解计算机系统笔记
- 深入理解计算机系统笔记
- 《深入理解计算机系统》笔记
- 深入理解计算机系统--笔记
- 深入理解计算机系统-笔记
- 深入理解计算机系统 笔记1 计算机系统漫游
- 深入理解计算机系统(笔记):计算机系统漫游
- 《深入理解计算机系统》第一章计算机系统漫游笔记
- 深入理解计算机系统-笔记-第一章-计算机系统漫游
- 深入理解计算机系统之笔记
- 《深入理解计算机系统》笔记一
- 深入理解计算机系统重点笔记
- 基于qt的嵌入式平台输入法:SYSZUXpinyin移植到arm后,UDP接收端中文乱码 本地中文乱码 解决
- Defend 射击小游戏教程
- 游标、事务并发和锁三者之间的那点事
- Linux Netlink机制
- 融合和变迁——有感DSP的衰落
- 深入理解计算机系统------->对齐限制笔记
- Cause: org.apache.ibatis.builder.BuilderException: Error creating document instance
- 类型转换
- PYthon 转换HTML到Text纯文本
- Android为返回键设置动画效果
- 8点FFT的C语言实现
- HDOJ_ 1133 Buy the Ticket
- POJ1651
- Inline Virtual Functions