【数据结构入门】顺序表和链表的区别,以及啥是缓存利用率

news/2024/5/20 9:50:37 标签: 链表, 数据结构, 缓存, 顺序表

文章目录

    • (1)顺序表链表的区别
    • (2)缓存利用率
      • 1)存储器层次结构
      • 2)CPU和寄存器、高速缓存,以及主存之间的关系
      • 3)缓存利用率

(1)顺序表链表的区别

链表顺序表各有优劣,它们相辅相成

顺序表链表
存储空间上物理上一定连续逻辑上连续,物理上不一定连续
随机访问(用下标访问)支持 [ O(1) ]不支持 [ O(N) ]
在任意位置插入或者删除元素可能需要挪动元素,效率低 [ O(N) ]只需要修改指针指向
插入动态顺序表,空间不够时需要扩容
(扩容可能造成空间浪费)
没有容量的概念,按需申请空间
应用场景元素高效存储、随机访问多
(尾插尾删时间复杂度为O(1))
任意位置频繁的插入和删除
缓存利用率

(2)缓存利用率

1)存储器层次结构

image-20211114215140976

2)CPU和寄存器、高速缓存,以及主存之间的关系

假如我们写了一个程序,实现分别对顺序表链表上的每个数据+1,这个程序会被编译成指令,由CPU执行指令

CPU运算速度快,读取内存,内存速度跟不上,CPU一般就不会直接访问内存,而是把要访问的数据先加载到缓存体系,如果是小于8byte的数据,直接到寄存器,如果是大的数据会到三级缓存,CPU直接跟缓存交互。

image-20210910162803993

如图:做菜时先会到缓存中去取食材,缓存中没有食材,再去内存那里买……

image-20210910163746223

3)缓存利用率

实现分别对顺序表链表上的每个数据+1,要先读取数据,然后运算,再写回主存

CPU执行指令运算要访问数据,会先去缓存中找有没有这个数据:

  1. 如果有,说明缓存命中了

  2. 如果没有,说明缓存未命中,就从主存中读取一段连续内存空间的数据缓存,继续找

image-20210910170439819

顺序表物理地址是连续的,增加了命中率,就不用频繁的从主存中读数据到缓存中,提高了缓存利用率

这就是物理地址连续的优势,所以在现实生活中,很多地方还是推荐用顺序表

参考文章:

  • 与程序员相关的CPU缓存知识 | 酷 壳 - CoolShell


http://www.niftyadmin.cn/n/1579725.html

相关文章

linux面试题(简答题部分)

linux面试题&#xff08;简答题部分&#xff09;<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" />简述进程的启动、终止的方式以及如何查看进程&#xff1f;答&#xff1a;启动进程的方式分为手动启动和自动启动两种方式&#xf…

【数据结构入门】栈(Stack)的实现(定义、销毁、入栈、出栈等) | 图解数据结构,超详细哦~

文章目录&#xff08;1&#xff09;前言1&#xff09;栈的概念2&#xff09;进栈出栈的形式3&#xff09;栈的存储结构&#xff08;2&#xff09;栈的实现&#xff08;顺序栈&#xff09;1&#xff09;栈的定义2&#xff09;栈的初始化3&#xff09;栈的销毁4&#xff09;入栈5…

转载-一位资深程序员的程序人生总结十三条

展望未来&#xff0c;总结过去10年的程序员生涯&#xff0c;给程序员小弟弟们的一些总结性忠告&#xff0c;走过的路&#xff0c;回忆起来是那么曲折&#xff0c;把自己的一些心得体会分享给程序员兄弟姐妹们&#xff0c;虽然时代在变化&#xff0c;但是很可能你也会走我已经做…

【LeetCode】括号匹配问题(C语言)| 动图演示,超详细哦~

文章目录&#xff08;1&#xff09;题目描述&#xff08;2&#xff09;解题思路&#xff08;1&#xff09;题目描述 给定一个只包括 (&#xff0c;)&#xff0c;{&#xff0c;}&#xff0c;[&#xff0c;] 的字符串 s &#xff0c;判断字符串是否有效。 有效字符串需满足&#…

[Android]点击按钮进入下一个Activity时显示动画效果

动画效果写在xml里&#xff0c; 在按键的onClickListener里如果写成这样 ?12345678Overridepublic void onClick( View v ){Animation hang_fall AnimationUtils.loadAnimation( Curriculum.this, R.anim.hang_fall );v.startAnimation( hang_fall );Intent i new Intent( T…

【数据结构入门】队列(Queue)详解(定义、销毁、入队、出队等)| 图解数据结构,超详细哦~

文章目录&#xff08;1&#xff09;前言1&#xff09;队列的概念2&#xff09;队列的结构&#xff08;2&#xff09;队列的实现&#xff08;链式结构&#xff09;1&#xff09;队列的定义2&#xff09;队列的初始化3&#xff09;队列的销毁4&#xff09;入队&#xff08;尾插&a…

百分点推荐引擎——从需求到架构

转载自&#xff1a;http://www.infoq.com/cn/articles/baifendian-recommendation-engine 百分点推荐引擎是国内领先的推荐技术平台&#xff0c;专注于为电子商务和资讯网站提供SaaS模式的个性化推荐服务&#xff0c;提高网站的整站转化率和用户黏度。本文将从电子商务网站的实…

【LeetCode】用队列实现栈(C语言)| 动图演示,超详细哦~

文章目录&#xff08;1&#xff09;题目描述&#xff08;2&#xff09;解题思路题目难度&#xff1a;《简单》&#xff08;1&#xff09;题目描述 请你仅使用两个队列实现一个后入先出&#xff08;LIFO&#xff09;的栈&#xff0c;并支持普通栈的全部四种操作&#xff08;push…