第一章笔记传送门 👉 点击这里
第二章笔记传送门 👉 点击这里
第三章笔记传送门 👉 点击这里
第四章笔记传送门 👉 点击这里
第五章笔记传送门 👉 点击这里
第六章笔记传送门 👉 点击这里
第七章笔记传送门 👉 点击这里
第八章笔记传送门 👉 点击这里
第九章笔记传送门 👉 点击这里
第四章:熟练使用有棱有角的内存
- 有十个地址信号引脚的内存IC(集成电路)可以指定的地址范围是多少
0000000000 - 1111111111 (即0 - 1023) - 高级编程语言中的数据类型表示的是什么
占据内存区域的大小和存储在该区域的数据类型 - 在32位内存地址的环境中,指针变量的长度是多少位
32位 - 与物理内存有着相同构造的数组的数据类型长度是多少
1字节(物理内存是以字节为单位进行数据存储的) - 用LIFO方式进行数据读写的数据结构成为什么
栈(Last In First Out) - 根据数据的大小链表分叉成两个方向的数据结构称为什么
二叉查找树
4.1 内存的物理机制很简单
- 内存实际上是一种名为内存IC的电子元件
(包含DRAM,SRAM,ROM等多种形式) - 内存IC中有电源、地址信号、数据信号、控制信号等用于输入输出的大量引脚(IC的引脚),通过为其指定地址来进行数据的读写)
- ROM(Read Only Memory):一种只能用来读取的内存
- RAM(Random Access Memory):可被读取和写入的内存
2.1 DRAM(Dynamic RAM):需要经常刷新以保存数据
2.2 SRAM(Static RAM):不需要经常刷新电路即可保存数据
- 在上图表示的内存IC中,数据引脚有8个,表示一次可以输入输出8位。此外,地址信号引脚有10个,表示可以指定0000000000 -1111111111共1024个地址。而地址表示数据的存储场所,因此我们可以得出这个内存可以存储1024个字节的数据。所以该内存IC的容量就是1KB。
(通常情况下,计算机使用的内存IC中会有更多的地址信号引脚,这样就能在一个内存IC中存储数十兆字节的数据。因此,只用数个内存IC,就可以达到512MB的容量) - 在上图IC中存入1KB数据的操作:
给VCC接入+5V电源
给GND接入0V电源
使用A0 - A9的地址信号指定存储场所
把数据的值输入给D0 - D7 这些数据信号
把WR信号设定成1 - 在上图IC中取出1KB数据的操作:
把A0 - A9的地址信号指定成数据的存储场所
将RD的信号设成1
指定地址中存储的数据会被输出到D0 - D7的数据信号引脚
像WR、RD这样可以让IC运行的信号称为控制信号
(当WR、RD同时为0时,写入和读出的操作都是无法进行的)
4.2 内存的逻辑模型是楼房
- 低字节序:将多字节数据的低位字节存储在内存低位地址的方式
- 高字节序:相反
4.3 简单的指针
- 指针:是一种变量。表示的不是数据的值,而是存储着数据的内存的地址。
(在32的机器上,指针变量的长度是32位,在C语言中会遇到int * p, float *p这样指定类型的写法,这样的目的是从指针存储的地址中一次能读写的数据的字节数)
(举例:char *d, short *e, long *f;这三句中,d,e,f的值都是100。这种情况下使用d时就能从编号100的地址中读写1个字节的数据,使用e时就是2个字节的数据,使用f时就是4个字节(100地址-103地址)的数据。
4.4 数组是高效使用内存的基础
- 数组的索引和内存地址的变换工作是由编译器自动实现的
- CPU通过利用基址寄存器和变址寄存器来指定内存地址
- char类型以1个字节为单位对内存进行读写,long类型以四个字节对内存进行读写。
- 数组是使用内存的基本
4.5 栈、队列以及环形缓存区
- 栈和队列,都可以不通过指定地址和索引来对数组的元素进行读写。
(需要临时保存计算过程中的数据,连接在计算机的设备上的输入或者输出的数据时,都可以通过这些方法使用内存。) - 队列一般是以环状缓冲区的方式来实现的
4.6 链表使元素的追加和删除更容易
- 这部分书中讲的过于基础,不再赘述
4.7 二叉查找树使数据结构搜索更有效
- 二叉查找树:指在链表的基础上往数据种追加元素时,考虑到数据的大小关系,将其分成左右两个方向的表现行式。
**下一章的简单引荐:**磁盘虽然在物理方面只能以扇区为单位进行读写,但是通过在程序种多花一些心思,磁盘也可以各种形态来用。