cpu高速缓存命中率
一、cpu高速缓存命中率
从硬件上来说存储体系的分布如下:
其中磁盘和远程二级存储是不带电存储,而主存、高速缓存和寄存器是带电存储。
我们的数据是从内存向上,先到L3,再到L2,再到L1,最后到寄存器进行CPU计算。
缓存基本上来说就是把后面的数据加载到离自己近的地方,对于CPU来说,它是不会一个字节一个字节的加载的,因为这非常没有效率,一般来说都是要一块一块的加载的,对于这样的一块一块的数据单位,一个主流的CPU的Cache Line 是 64 Bytes(也有的CPU用32Bytes和128Bytes),64Bytes也就是16个32位的整型,这就是CPU从内存中捞数据上来的最小数据单位。
当访问存储1数据的内存位置0x00123400时。先看这个地址在不在缓存中。
在就直接访问,不在就先加载到缓存,再访问。(一般来说第一次访问都不命中)
那第一次访问都不命中那为什么数组的命中率高呢?
由于数组的存储是一块连续的内存,CPU一般来说都是要一块一块的加载的。所以当CPU要访问2地址的时候,2的地址大概率已经跟着1被提前加载到CPU中了,所以减少了加载2地址的时间。
而对于链表来说它的地址是不连续的,所以当访问到2的地址时大概率要重新加载到缓存。
所以链表的命中率要低于顺序表。