社区
数据结构与算法
帖子详情
80分:为什么要字节对齐?
lzhongsh
2005-03-31 12:05:53
编译器为程序分配内存时,为什么要进行字节对齐?什么时候进行字节对齐?
对如下声明:
char a[17];
int i;
其中i为4字节长度,若编译器对齐方式为4字节,是不是要分配24字节,其中头17个分配给字符型数组a,中间空3字节,后4字节分配给i?这么做有什么好处?
...全文
392
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,会非常慢)的机会会增加,这些都降低了程序的速度。
什么是
字节
对齐
,为什么要
字节
对齐
?
http://blog.csdn.net/xhfwr/archive/2006/07/23/963793.aspx 一.什么是
字节
对齐
,为什么要
对齐
? 现代计算机中内存空间都是按照byte划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但实际情况是在访问特定类型变量的时候经常在特 定的内存地址访问,这就需要各种类型数据按照一定的规则在空间上排列,而不是顺序的一个接一个的排
为什么要
字节
对齐
?
转载:https://blog.csdn.net/zkf11387/article/details/7662450 文章最后本人做了一幅图,一看就明白了,这个问题网上讲的不少,但是都没有把问题说透。 一、概念
对齐
跟数据在内存中的位置有关。如果一个变量的内存地址正好位于它长度的整数倍,他就被称做自然
对齐
。比如在32位cpu下,假设一个整型变量的地址为0x00000004,那它就...
字节
对齐
字节
对齐
一:什么是
字节
对齐
: 计算机在读取数据按照一定的规则在空间上排列,而不是顺序的一个接一个的排放,这就是
对齐
。 二:为什么要
对齐
?
字节
对齐
就是计算机为了提高执行效率,以内存空间换取执行效率,如果计算机一个
字节
一个
字节
读取数据,必然是最省空间的但是这样操作起来执行的速度太慢,效率太低,所以要出现
字节
对齐
,让计算机一次性读取几位,提高执行效率,但这样又会浪费空间,所以
字节
对齐
是
【编程基础の基础】为什么要
字节
对齐
?
什么是
字节
对齐
? 计算机并非逐
字节
读取内存,而是按2,4,8的倍数的
字节
块读写内存,故地址必须为上述倍数,故各种数据类型需要按照一定规则在空间上排列
对齐
准则 结构体变量首地址可被
对齐
字节
数大小所整除 结构体每个成员相对该结构体首地址的偏移都是成员大小的整数倍(如需要,填充
字节
) 结构体总大小为结构体
对齐
字节
数大小的整数倍 为什么要
字节
对齐
? 可优化【读写效率】【空间存储】【跨平台通信】 读写效率 考虑场景如下:若计算机每次读取8
字节
块,此时读取一个double,若未
字节
对其,可能该double位与
什么是
字节
对齐
,为什么要
对齐
一.什么是
字节
对齐
,为什么要
对齐
? 现代计算机中内存空间都是按照byte划分的,从理论上讲似乎对任何类型的变量的访问可以从任 何地址开始,但实际情况是在访问特定类型变量的时候经常在特 定的内存地址访问,这就需要各种类型数据按照一定的规则在空间上排列,而不是顺序的一个接一个的 排放,这就是
对齐
。
对齐
的作用和原因:各个硬件平台对存储空间的处理上有很大的不同。一些平台对某些特定类型 的
数据结构与算法
33,028
社区成员
35,337
社区内容
发帖
与我相关
我的任务
数据结构与算法
数据结构与算法相关内容讨论专区
复制链接
扫一扫
分享
社区描述
数据结构与算法相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章