cpu 的 cache 是很宝贵的——从互相平行的数组看

以前一直想不通,为什么在有些系统中,要把同一个数据结构的不同字段放入 多个互相平行的数组中,而不是放入一个结构中。

典型的如Windows PE 可执行文件的导入表,有 IAT (导入地址表)和 INT(导入名字表),这两个表就放在两个互相平行的数组中,而按照我们的第一感觉,好像这样的设计纯粹是玩弄我们的大脑,没有任何别的益处。其实仔细想想,这样的益处是很大的,在Windows 从 INT 载入 IAT 以后,INT 就几乎永远用不着了,而 IAT 使用得非常频繁,这样,CPU 就会把 IAT 载入 cache,如果把 INT 和 IAT 分离(两个平行的数组),CPU 载入 IAT 时就不会连 INT 也载入了。而如果不分离(INT和IAT中每项合并起来放入一个结构),CPU载入IAT时,因为没有用的 INT 项目在物理位置上(地址)和IAT的相应项目是相邻的,所以就连 INT 也一起载入了,这样就多浪费了一倍的 CPU cache。

在很多性能敏感的应用或系统中,这样的设计是很必要的,往往提高好几倍的性能。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值