首页 > 系统相关 >《程序是怎样跑起来的》第四章——熟练使用有棱有角的内存?

《程序是怎样跑起来的》第四章——熟练使用有棱有角的内存?

时间:2024-02-16 12:33:41浏览次数:22  
标签:队列 元素 链表 有棱有角 内存 数组 数据 第四章

关于这一章,是目前让我最感兴趣的一章,因为说到了内存,在编程过程中我经常遇到内存这类的问题,如堆、栈溢出,如何更好的使用内存,所以对内存格外想要了解。

内存的实体实际上是一种名为内存IC的电子元件,有多种类型如:RAM,ROM等等。内存IC中有电源、控制信号、地址信号、数据信号。通过地址来进行读写。对于我们来说,内存的实体不用过多了解,在程序员的眼中内存可以假想为楼房,每一层中的人就是数据。而在程序中每一层的数据中还引入了数据类型的使用,来控制“人的大小”就是占用内存的大小。

现在来了解一下指针,指针是学习C语言绕不过去了一题。而指针其实也是变量。表示的不是数据的值,而是存储数据的地址。通过指针来对指定地址的数据进行读写操作。

 

了解了基础知识,那么如何熟练使用有棱有角的内存呢?就是使用数组。数组是只多个数据类型相同的数据连续在内存中排列的一种形式。各个元素通过各自的编号来区分。这个编号就是索引。通过对数组的使用能让我们的代码变得更加的高效和简洁。数组使我们学习中重要的一部分,需要熟练掌握数组和数值的各种变形,栈,队列和各种容器等等。

栈和队列的区别在于数据出入的顺序是不同的,栈使用的是后入先出的方式(LIFO),而队列使用的是先入先出的方式(FIIFO)。如果要在程序中实现栈和队列,需要适当的元素数来定义存储数据的数组,和对数组进行读写的函数,将数据写入栈的函数名为Push,读出的函数名为Pop,往队列中写入数据的函数名为Enqueue,读出的函数为Dequeue。他们分别组成一队函数,通过对它们的使用来操作栈和队列。

例:

运行:

 栈(后入先出):

 队列(先入先出):

 如图队列的读写机制如同排队一样,而队列的实现一般是使用环状缓冲区(ring buffer),如图,读写也就循环起来了:

栈和队列都是不用考虑索引的顺序来进行读写的方式,接下来的链表和二叉查找树,链表可以更高效的对数组(元素)进行追加和删除的操作。二叉查找树可以对数组进行更高效的检索。

链表:在数组的各个元素上为其附带上 上下的元素的索引就可实现链表。数据的值和先一个元素的索引就构成了数组的一个元素。

在链表中删除一个中间元素,无需将下边各各元素向前移动,链表对自动补位,就省去了移动大量元素的操作。

二叉查找树:指在链表的基础上往数组中追加元素时考虑数据的大小关系,将其分为左右两个方向存储的表现形式。

 二叉查找树的便利之处在于,对数据的搜索能力更有效率,二叉查找树是由链表构造发展的表现形式,因此在数据的追加好删除也同样有效。

 

 

 

标签:队列,元素,链表,有棱有角,内存,数组,数据,第四章
From: https://www.cnblogs.com/wcpp/p/18007076

相关文章

  • C++多线程 第五章 C++内存模型和原子类型
    第五章C++内存模型和原子类型无论其他语言如何,C++是一门系统编程语言.委员会希望不再需要一个比C++低级的语言.内存模型基础C++程序中所有的数据均是由对象(object)组成的.C++标准定义对象为"存储区域",经管它会为这些对象分配属于它们的类型和生存期.无论什么类型,对象......
  • 《程序是怎样跑起来的》第四章
    心得:了解了内存的物理机制和逻辑:了解了指针,数组,栈,队列,环形缓冲区,链表以及二叉查找树知识点(我觉得是):1、高级编程语言中的数据类型表示的是占据内存区域的大小和存储在该内存区域的数据类型2、与物理内存有着相同构造的数组的数据类型长度是1字节3、用LIFO方式进行数据读写的数......
  • OOM内存泄露速查备忘录
    本文整理了一份OOM内存泄露问题速查备忘录,详细见下文。1、核心步骤top、free、df三连,查看CPU、内存、磁盘的大致情况。netstat-lp查看端口占用情况。导出内存dump文件:#保存了堆内存现场jmap-dump:format=b,file=heap.dumppid#强制保存了堆内存现场jmap-F-dump:......
  • 探索C语言的内存魔法:动态内存管理解析
    ✨✨欢迎大家来到贝蒂大讲堂✨✨......
  • 内存和磁盘的关系
    通过使用内存来提高磁盘访问速度的机制称为磁盘缓存,指的是把磁盘中读出的数据存储在内存中,当该数据再次被读取时,不是从磁盘而是直接从内存中高速读出;把磁盘的一部分作为假想内存来使用的机制称为虚拟内存,借助虚拟内存,哪怕内存容量不足的计算机,也可以运行很大的程序;Wind......
  • Python获取 CPU 温度、CPU 占用、内存总空间、内存占用空间、系统磁盘总空间、系统磁
    先下载依赖pip3installpsutil代码importpsutil#获取CPU温度defget_cpu_temperature():try:temperatures=psutil.sensors_temperatures()if'coretemp'intemperatures:forentryintemperatures['coretemp']:......
  • C++多线程 第四章 同步并发操作
    第四章同步并发操作等待事件设想一个情景:你正坐在一辆从哈尔滨驶向郴州的绿皮火车上,这趟车需要耗时2天2夜,合计3000公里的路程.于是在这里,我们将你和司机视作为两个线程.你的任务是在目的地下车,司机的任务是将车开到目的地.假设你和司机坐在同一个车厢内,并且你是个不说......
  • 罕见的YTX版型!铭瑄H770YTX D5 WIFI背插主板评测:强大扩展能力 内存轻松上8000MHz
    一、前言:罕见的YTX版型常见的主板版型有ATX、M-ATX和ITX。不过随着电脑个性化时代的来临,为了满足玩家越来越苛刻的外观造型需求,铭瑄推出了全新的MS-终结者H770YTXD5WIFI背插主板。铭瑄H770YTXD5WIFI采用的是YTX版型,尺寸为24.5cm*17.5cm,长度与M-ATX主板一样,宽度与ITX主板相......
  • 云服务centos7 增加虚拟内存
    1、查看磁盘使用情况free-h而Mem就表示购买阿里云时候的内存,我们能够看到只有3.9G,并且已经使用了3.7G。 2、添加Swap分区使用dd命令创建名为swapfile的swap交换文件(文件名和目录任意):ddif=/dev/zeroof=/var/swapfilebs=1024count=4194304dev/zero是Linux的一种特殊字......
  • 【幻兽帕鲁教程】服务器内存优化
    大量幻兽帕鲁玩家反馈,开服后在进行一段时间的游戏后会出现内存溢出导致异常退出游戏的情况,这里为大家提供一些缓解内存不足的方案作参考: 一:为Windows服务器配置虚拟内存本小节以WindowsServer2022为例,其他版本的Windows操作系统类似,可据此做参考。1、打开服务器的控......