1.内存的物理机制很简单
内存实际上是一种名为内存IC的电子元件。虽然内存IC包括 DRAM、SRAM、ROM等多种形式,但从外部来看,其基本机制都是一样的。内存IC中有电源、地址信号、数据信号、控制信号等用于输入输出的大量引脚(IC的引脚),通过为其指定地址(address ),来进行数据的读写。
VCC和GND是电源,A0A9是地址信号的引脚,D0D7是数据信号的引脚,RD和WR是控制信号的引脚。将电源连接到VCC和GND后,就可以给其他引脚传递比如0或者1这样的信号。大多数情况下,+5V的直流电压表示1,0V表示 0。
2.内存的逻辑模型是楼房
在介绍程序时,大部分参考书都会用类似于楼房的图形来表示内存。 对于程序员来说,这种形象有用于了解内存。
3.简单的指针
指针是内存逻辑模型中的一个重要概念。在C语言中,指针用于储存内存位置。当使用这些指针变量时,可以从相应的内存地址中读取或写入数据。
4.数组是高效使用内存的基础
数组是一种数据结构,可以存储相同类型的数据元素,并且这些数据元素在内存中是连续存储的。这种连续存储的特性使得数组在访问和操作数据时具有很高的效率。
数组可以利用内存的局部性原理来提高访问效率。
4.栈、队列以及环形缓冲区
栈和队列,都可以不通过指定地址和索引来对数组的元素进行读写。需要临时保存计算过程中的数据、连接在计算机上的设备或者输人输出的数据时,都可以通过这些方法来使用内存。如果栈和队列的区别在于数据出入的顺序是不同的。在对内存数据进
行读写时,栈用的是LIFO即后入先出的方式,而队列用的则是FIFO即先入先出的方式。在内存中预留出栈和队列所需要的空间,并确定好写人和读出的顺序,就不用再指定地址和索引了。如果要在程序中实现栈和队列,就需要以适当的元素数来定义一个用来存储数据的数组,以及对该数组进行读写的函数对。
环形缓冲区是一种特殊的队列,它使用固定大小的数组来实现。当数据到达数组的末尾时,它会循环回到数组的开始位置。环形缓冲区常用于音频处理、网络传输等需要连续数据流处理的场景。
5.链表使元素的追加和删除更加容易
链表是一种由节点组成的数据结构,每个节点包含一个数据元素和一个指向下一个节点的指针。链表不要求数据元素在内存中连续存储,因此可以灵活地插入和删除元素。
6.二叉查找树使数据搜索更有效
二叉查找树是一种特殊的二叉树,由于二叉查找树的特性,使得它在很多应用中都非常高效,例如快速查找、插入和删除操作。二叉查找树广泛应用于数据库和文件系统的索引、内存管理等场景。它们提供了一种快速查找、插入和删除数据结构的方法,使得这些应用能够高效地处理大量数据。