找回密码
 立即注册
搜索
热搜: 活动 通知
查看: 1222|回复: 5

关于内存地址分配字节对齐的疑惑

[复制链接]

6

主题

14

回帖

130

积分

注册会员

积分
130
发表于 2023-12-31 13:26:06 | 显示全部楼层 |阅读模式
李老师,您好!最近在学习X64的课程,在内存地址地址分配过程中(分配内核区域线性地址),您谈到需要按8字节对齐;以前在x86内存地址分配中您也谈到需要按4字节对齐,对这字节对齐这个问题一直无法理解。
在8086段地址分配按2字节对齐我可以理解,因为这样段内偏移地址就刚好在段内从0开始计算。

418

主题

316

回帖

3296

积分

管理员

积分
3296
发表于 2023-12-31 13:36:53 | 显示全部楼层
8086的段地址要求必须是按16字节对齐的,因为段的物理地址必须是能被16整除。在其它情况下,对齐是为了提高性能,而不是强制性要求。
另一个例外就是分页。与分页有关的地址必须按4KB对齐,这是为了能够将它们映射到分页系统表项内。

6

主题

14

回帖

130

积分

注册会员

积分
130
 楼主| 发表于 2023-12-31 13:46:38 | 显示全部楼层
好的,明白了,谢谢

6

主题

14

回帖

130

积分

注册会员

积分
130
 楼主| 发表于 2023-12-31 13:51:16 | 显示全部楼层
提高性能是不是从硬件层面理解呢,以前在学数字电路的时候也从硬件层面思考过,但还是无法理解。当时是为了思考C语言结构体字节对齐,也说是为了提高性能,但一直不明白。

418

主题

316

回帖

3296

积分

管理员

积分
3296
发表于 2023-12-31 14:08:32 | 显示全部楼层
x86Orx64 发表于 2023-12-31 13:51
提高性能是不是从硬件层面理解呢,以前在学数字电路的时候也从硬件层面思考过,但还是无法理解。当时是为了 ...

对。如果能用软件优化,那就不是问题了。
如果你学过计算机原理,特别是了解过内存芯片的电路组织,就能明白对齐的重要性:如果是对齐的,单次就可以访问到需要的数据(比如8个字节的数据);如果不是对齐的,就需要内存系统用多个时钟周期完成数据的拼接或者切割。
为什么内存系统的硬件如此复杂:原因很简单,因为我们需要内存系统可以按字节、字、双字、四字访问,而不是只按一种固定的长度来访问。

6

主题

14

回帖

130

积分

注册会员

积分
130
 楼主| 发表于 2023-12-31 17:05:14 | 显示全部楼层
好的,谢谢老师
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|鼠侠网 ( 吉ICP备19001332号 )

GMT+8, 2024-12-22 14:45 , Processed in 0.220273 second(s), 18 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表