什么是CPU高速缓存

前言

在提到顺序表和链表的区别时,通常会提到一句:顺序表的CPU缓存率高于链表。为什么会有这句话的出现呢?而CPU缓存利用率是什么呢?

引入

首先我们需要了解一下计算机的存储体系

如图所示:越往上读取速度会越快,同时大小也越来越小;

CPU如何遍历数据?

假设,我们现在需要去遍历顺序表和链表

在程序编译过程中,编译我们所写的遍历代码后会进行汇编,汇编就是将我们缩写的代码转化为二进制的机器码。而CPU去执行我们的读取遍历指令时,并不是从我们的内存中直接读取的,而是从3个高速缓存中读取的,为什么呢?说白了就是速度快

读取过程是怎么样的呢?可以分为以下3步:

  • 首先,遍历时总会存第一个顺序表或者元素的地址内开始去操作;

  • CPU会首先去访问存储数据1的内存地址;

  • 查看这个地址在不在高速缓存当中

    • 在:直接访问;
    • 不在:把这个内容的地址加载到高速缓存当中后再访问;

CPU加载缓存机制

你可能会问:当读取第一个元素中时,链表的不在,顺序表也不在,那为什么会出现利用率的区别呢?来,我们再了解一下它加载到缓存中的机制;

在计算机体系中提到:当CPU将要把内容放到高速缓存当中时,由于考虑到用户在实际使用当中很可能马上会访问它的相邻位置,也就是所谓的就近原则

CPU将内容放进高速缓存当中时,是不会单独把数据1的位置放进缓存中的,而是会将其身后一段连续的空间一起加载缓存中。具体加载大小取决于操作系统的硬件体系。

小结

现在我们来想想顺序表有什么特点?内存空间是成片连续的。

链表的结构有什么特点?可能会有连片的区域,但多数是散落在内存空间的各个区域。

那么在加载顺序表的元素到缓存当中时,CPU很大可能会把我们后续的空间也一起放进去,这样在CPU读取过程当中会非常大的提高访问速度。

加载链表时,链表的存储方式很大可能不是连片的区域而是散落在堆区的各个角落,因为CPU会加载身后连续一片区域,假设我们链表元素有5个元素,一个结点占4个字节,而CPU一次就加载20个字节,又出于不是连续空间的原因,在遍历访问链表的5个元素时很有可能放在高速缓存内100个字节,这不仅会造成缓存空间的浪费,还很有可能会造成内存空间污染(因为缓存大小有限,如果满了就会排出其余元素),如果链表每次都这样玩,中午玩还没啥问题,但早晚会出事(bu)!!

至此,就有了顺序表和链表的缓存利用率的区别;

结语

创作不易,如果你觉得这篇文章对你有用的话,别忘了点赞在看+关注噢!

后续,我们会将最新文章第一时间发送在微信公众号:“01编程小屋”当中,别忘了关注我们的公众号以免错过了噢!

什么是CPU高速缓存相关推荐

  1. 【Android 逆向】函数拦截实例 ( ③ 刷新 CPU 高速缓存 | ④ 处理拦截函数 | ⑤ 返回特定结果 )

    文章目录 前言 一.刷新 CPU 高速缓存 二.处理拦截函数 1.桩函数 2.处理拦截函数 三.返回特定结果 四.相关完整代码 前言 [Android 逆向]函数拦截实例 ( 函数拦截流程 | ① 定 ...

  2. 【Android 逆向】函数拦截 ( CPU 高速缓存机制 | CPU 高速缓存机制 导致 函数拦截失败 )

    文章目录 一.CPU 高速缓存机制 二.CPU 高速缓存机制 导致 函数拦截失败 一.CPU 高速缓存机制 CPU 架构模型中 , 指令 在开始时 , 存放在内存中 , 如 : /proc/pid/m ...

  3. 软硬件协同编程 - C#玩转CPU高速缓存(附示例)

    写在前面 好久没有写博客了,一直在不断地探索响应式DDD,又get到了很多新知识,解惑了很多老问题,最近读了Martin Fowler大师一篇非常精彩的博客The LMAX Architecture, ...

  4. 高并发、低延迟之C#玩转CPU高速缓存(附示例)

    写在前面 好久没有写博客了,一直在不断地探索响应式DDD,又get到了很多新知识,解惑了很多老问题,最近读了Martin Fowler大师一篇非常精彩的博客The LMAX Architecture, ...

  5. CPU高速缓存与极性代码设计

    摘要:CPU内置少量的高速缓存的重要性不言而喻,在体积.成本.效率等因素下产生了当今用到的计算机的存储结构. 介绍 cpu缓存的结构 缓存的存取与一致 代码设计的考量 最后 CPU频率太快,其处理速度 ...

  6. 每个程序员都应该了解的 CPU 高速缓存

    每个程序员都应该了解的 CPU 高速缓存 英文原文:Memory part 2: CPU caches 来源:oschina [编者按:这是Ulrich Drepper写"程序员都该知道存储 ...

  7. 【Android 逆向】函数拦截 ( 使用 cache_flush 系统函数刷新 CPU 高速缓存 | 刷新 CPU 高速缓存弊端 | 函数拦截推荐时机 )

    文章目录 一.使用 cache_flush 系统函数刷新 CPU 高速缓存 二.使用 cache_flush 系统函数刷新 CPU 高速缓存的弊端 三.函数拦截推荐时机 一.使用 cache_flus ...

  8. 【硬件设备】CPU 高速缓存知识

    目录 概述 CPU 的多级缓存 提升L1数据缓存的命中率 提升L1指令缓存的命中率 提升多核 CPU 下的缓存命中率 结论 概述 在计算机系统中,CPU高速缓存(英语:CPU Cache,在本文中简称 ...

  9. java底层知识(3)--CPU 高速缓存

    本文转载自: http://blog.jobbole.com/36263/ 尊重原创 3.CPU的高速缓存 现在的CPU比25年前要精密得多了.在那个年代,CPU的频率与内存总线的频率基本在同一层面上 ...

  10. 每个程序员都应该了解的 CPU 高速缓存【第二部分】

    文章来源 每个程序员都应该了解的 CPU 高速缓存 [编者按:这是Ulrich Drepper写"程序员都该知道存储器"的第二部.那些没有读过第一部 的读者可能希望从这一部开始.这 ...

最新文章

  1. 拨号用户如何使用局域网上的LinuxSamba服务器
  2. Linux怎么查看并杀死被占用的端口?
  3. .net中从GridView中导出数据到excel(详细)
  4. AtCoder Grand Contest 008: Contiguous Repainting(思维)
  5. ubuntu18.10下面从视频中提取音频
  6. amigo幸运字符什么意思_转载 | 史上最全 python 字符串操作指南
  7. orion sam mysql_JAVA/JSP学习系列之四(Orion App Server的安装)_MySQL
  8. 网页前端培训笔记(JavaScript事件)
  9. Msfvenom木马使用及TheFatRat工具
  10. CDA level 1 Part2概念及实操
  11. airplay连接电脑 linux,苹果手机怎么无线投屏,AirPlay怎么连接电脑
  12. java到底是引用传递还是值传递?
  13. QObject::moveToThread: Current thread(...) is not the object`s thread. Cannot move to target thread(
  14. 业余时间你在做什么,你就会变成什么样的人?
  15. 有必要说一说即将到来的春招(经历+重要性+如何准备)
  16. [思语]_心上人,我想对你说
  17. element-ui表格中表头表内容的居中左右对齐
  18. 输入码(外码),国标码,区位码,机内码,字型码的概念与关系
  19. 写一个判断素数的函数,在主函数输入一个整数,输出是否为素数的信息
  20. 故障分析 | 数据库故障 MHA 未切换

热门文章

  1. 编程的常见28种设计模式(如若不全敬请谅解)
  2. nginx提升网站访问速度
  3. python循环结构练习(五)—— 模拟银行ATM存款取款
  4. Java实战之图书管理系统(JavaFX版)(7)——图书类别维护界面及功能实现
  5. Matlab2018安装成功后,打开出现licensing error:-8523解决方法
  6. 一款可留言的甜甜的恋爱计时网站源码
  7. 计算机本科应届生薪资大多是多少?外行人18k垫底25k人均水平
  8. Python turtle库绘制同心圆
  9. vue 扫码枪 扫码墩 扫码器 中文输入影响 大小写影响 解决方案 js web端扫码枪对接 前端扫码枪 html扫码枪 vue扫码枪
  10. MATLAB全部随机函数