文章目录
- 棱角分明的内存
-
- 0、热身问题
- 1.内存的物理机制非常简单
- 2.内存的逻辑模型是建筑
- 简单的指针
- 4.数组是有效使用内存的基础
- 5.栈、队列和环形缓冲区
- 6.链表使元素更容易添加和删除。
- 7.二叉搜索树使数据检索更有效
棱角分明的内存
0、热身问题
- 有十个地址信号引脚的内存IC(集成电路)指定的地址范围是多少? 2^10 = 1024个地址,即十六进制表示0x 00 00 00 ~ 0x 0F FF FF。
- 高级编程语言中的数据类型是什么? 内存区域的大小和存储在内存区域的数据类型。
- 指针变量的长度是多少? 32位。
- 数组的数据类型长度与物理内存相同? 1字节。因为物理内存是字节为单位存储数据。
- 用LIFO数据读写的数据结构叫什么? LIFO(Last In First Out,先进后出),栈。
- 为什么数据结构按数据的大小链表分为两个方向? 二叉查找树(Binary Search Tree)。
由于数据对象存储在内存和磁盘上,程序必须能够自由使用内存和磁盘。在本文中,让我们先了解内存,然后再了解磁盘。
1.内存的物理机制非常简单
内存:一种叫做内存IC电子元件。
内存中有大量的引脚输入和输出(IC引脚),包括电源、地址信号、数据信号、控制信号等。(address)读写数据。
例如,我们的计算机通常是512M内存相当于524288KB的内存IC。
512M = 512 MB = 512 * 1024 * 1024 * 1 B 1KB = 1024 B = 1024 * 1 B 512MB / 1KB = 512 * 1024 = 524288
但一般来说,我们的计算机会有更多的地址引脚和数据引脚,这样的内存IC容量将达到数十兆字节。
接下来,我们来看看数据的读写。
2.内存的逻辑模型是建筑
我们上面提到的内存IC例如,类比于建筑,一楼可以存储一个字节数据,楼层号表示地址号。
数据类型:存储的数据类型。
变量:可以简单理解为内存地址的别名。
即使不指定内存地址,也可以在程序中读写内存。
以C语言为例。
char a = 123; //1字节 short b = 123; //2字节 long c = 123; //4字节
低字节序:将多字节数据的低字节存储在低内存中。奔腾等英特尔处理器使用低字节序。
高字节序:将多字节数据的高字节存储在低内存中。
以低字节序为例,虽然变量值为123,但其内存空间可能会有所不同。
简单的指针
每个人都应该记住C语言中的指针,我个人又爱又恨。
指南:存储数据的内存地址。
指针变量:存储指针变量。
char* d; short* e; long* f;
对于“short* e”:
- *变量是指针变量;
- short指数据类型,表示一次性可读字节数。
4.数组是有效使用内存的基础
数组:在内存中连续排列多种相同数据类型的数据。
索引:数组元素的编号。
编译器自动实现索引与内存地址的交换。指定索引后,CPU内存地址由基址寄存器和变址寄存器指定,然后读写。
根据指针与数组的关系:
- 基址寄存器对应数组名(指针)。
- 对应变址寄存器的索引(指针增量)。
char g[100]; //char类型数组以1字节读写内存。 short h[100]; //short以2字节为单位的类型数组读写内存。 long i[100]; //long类型数组以4字节读写内存。
5.栈、队列和环形缓冲区
栈:LIFO,后进先出。
队列:FIFO,先进先出。
应用:
- 栈:暂时放弃的据,随后再还原。
- 队列:先到先处理,如通讯中发的数据或同时运行的程序发送过来的数据。
这一块的知识在《数据结构与算法》这门课中会重点介绍。
6、链表使元素的追加和删除更容易
这一块的知识在《数据结构与算法》这门课中会重点介绍。
7、二叉查找树使数据检索更有效
这一块的知识在《数据结构与算法》这门课中会重点介绍。
注:如哟错误,敬请指正!