社区
数据结构与算法
帖子详情
80分:为什么要字节对齐?
lzhongsh
2005-03-31 12:05:53
编译器为程序分配内存时,为什么要进行字节对齐?什么时候进行字节对齐?
对如下声明:
char a[17];
int i;
其中i为4字节长度,若编译器对齐方式为4字节,是不是要分配24字节,其中头17个分配给字符型数组a,中间空3字节,后4字节分配给i?这么做有什么好处?
...全文
390
7
打赏
收藏
80分:为什么要字节对齐?
编译器为程序分配内存时,为什么要进行字节对齐?什么时候进行字节对齐? 对如下声明: char a[17]; int i; 其中i为4字节长度,若编译器对齐方式为4字节,是不是要分配24字节,其中头17个分配给字符型数组a,中间空3字节,后4字节分配给i?这么做有什么好处?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
7 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
MagicCarmack
2005-04-03
打赏
举报
回复
学到了,以前送来没注意到这个
dragonfly001
2005-04-01
打赏
举报
回复
學習中......................
boyate
2005-04-01
打赏
举报
回复
学到了,以前送来没注意到这个
许野平
2005-03-31
打赏
举报
回复
主要是考虑到CPU的存取速度。
寻开心
2005-03-31
打赏
举报
回复
下面两个连接可以回答你的问题
http://dev.csdn.net/article/56/56202.shtm
http://www.bd66.com/InfoView/Article_184.html
寻开心
2005-03-31
打赏
举报
回复
内存也是按照bank来对齐的
内存按照软件来理解的是连续的存储单元
但是对于硬件来说,是分bank的
一段连续的内存地址,由4个bank构成时候,地址和bank之间的对应关系如下
内存地址 0 1 2 3 4 5 6 7 8 9 10 。。。。
bank 分布 0 1 2 3 0 1 2 3 0 1 2 ......
pc是总线公用,是分时公用的,有时候是地址,有的时候是数据
对于从0开始的4个字节, 可以传一个地址,一次读取,4个bank并行,各自返回一个字节的
但是非0开始的4个字节,就要分两次传地址,4个bank无法同时并行
再说
地址对齐主要是针对 struct, union,class这些类型来说的
对于函数当中的单独变量,地址先后顺序是没有关系,没有规定的
地址对齐是编译器的控制行为,pack宏来决定对齐的具体方式
mathe
2005-03-31
打赏
举报
回复
主要是因为现代计算机都使用了Cache。
Cache可以看成一些可以用非常快的速度进行访问的临时内存。但是Cache的容量不大,比如一般一级Cache只有几K到几十K,二级Cache只有几百K到几M.这个同数G的内存相比,是比较小的。
但是CPU访问内存非常慢,所以硬件会将平时经常使用的内容存放到Cache里面。
Cache是通过一些Cache Line来组织的,每一条Cache Line一般包含16个字节,32个字节或64个字节等。 比如某个计算机一级Cache的Cache Line长度是32个字节,那么每段Cache Line总是会包含32个字节对齐的一段内存。
现在有一个4字节的整数,如果它的地址不是4字节对齐的,那么就有可能访问它的时候,需要使用两条Cache Line,这增加了总线通讯量,而且增加了对Cache的使用量,而且使用的数据没有在Cache里面(这时需要将数据从内存调入Cache,会非常慢)的机会会增加,这些都降低了程序的速度。
什么是
字节对齐
,为什么要
字节对齐
?
什么是
字节对齐
,为什么要对齐? 现代计算机中内存空间都是按照byte划
分
的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但实际情况是在访问特定类型变量的时候经常在特 定的内存地址访问,这就需要...
为什么要
字节对齐
?
文章最后本人做了一幅图,一看就明白了,这个问题网上讲的不少,但是都没有把问题说透。 一、概念 对齐跟数据在内存中的位置有关。...比如在32位cpu下,假设一个整型变量的地址为0x00000004,那它就...
字节对齐
二:为什么要对齐 ?
字节对齐
就是计算机为了提高执行效率,以内存空间换取执行效率,如果计算机一个字节一个字节读取数据,必然是最省空间的但是这样操作起来执行的速度太慢,效率太低,所以要出现
字节对齐
,让...
【编程基础の基础】为什么要
字节对齐
?
什么是
字节对齐
? ...为什么要
字节对齐
? 可优化【读写效率】【空间存储】【跨平台通信】 读写效率 考虑场景如下:若计算机每次读取8字节块,此时读取一个double,若未字节对其,可能该double位与
什么是
字节对齐
,为什么要对齐
什么是
字节对齐
,为什么要对齐? 现代计算机中内存空间都是按照byte划
分
的,从理论上讲似乎对任何类型的变量的访问可以从任 何地址开始,但实际情况是在访问特定类型变量的时候经常在特 定的内存地址访问,这就...
数据结构与算法
33,028
社区成员
35,337
社区内容
发帖
与我相关
我的任务
数据结构与算法
数据结构与算法相关内容讨论专区
复制链接
扫一扫
分享
社区描述
数据结构与算法相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章