1. 计算机的体系结构
计算机采用的为分层结构,主要分为两种结构:
- 冯诺依曼体系结构:绝大多数电脑的结构
- 哈佛体系结构
虽然存在不同的结构,但主要的结构均采用以下三种的层次:
2. 程序运行时各个层次作用
(1) CPU是计算的核心,用于解析机器码和执行指令。CPU的数据处理能力非常快,但是(寄存器的)存储空间非常有限。
(2)内存的数据传输速度适中(与CPU、硬盘比),存储空间适中;
(3)硬盘数据传输速度慢,存储空间大,我们的程序数据一般都是存于硬盘。
总结: 硬盘传输速度太慢,如果直接从硬盘读取数据就会和CPU速度不匹配,采用内存作为折中方案,程序刚开始是躺在硬盘中,当运行程序时,操作系统会把硬盘中内容拷贝到内存中,CPU从内存中读取数据处理,这个过程实际上是CPU是通过总线读取内存数据
。
3. CPU运行过程
CPU可以(通过总线)直接操作内存,这样的能力体现在CPU指令上。实际上,
计算机的绝大多数功能,都是通过CPU操作内存直接体现的
。
其他的显示器、硬盘、打印机等是“外设”。因此,CPU如何定位内存、操作内存,非常重要。
4. 什么是内存
从硬件角度看,内存就是内存条,
从软件角度看
:
- 每一个程序运行后,操作系统会分配一块空间给该程序,正在运行的程序的数据,绝大多数放在内存中;
- 为了能够让CPU可以精确操作每一处内存,所有的内存都有编号,他们被称为内存地址;
- 对于32位程序,内存地址的范围从0到0xFFFFFFFF,每个编号对应1字节的数据。
形象一些的比喻:内存是一个小区,内存地址是门牌号码
。
5. 指针的含义
C语言为了更好地表达内存寻址及数据处理的方式,发明了指针变量。
每一个指针变量中,都保存一个内存地址
。
按照以上的类比,如果内存是小区,内存地址是门牌号码,那么指针更像是名片。
int main(int argc, char* argv[])
{
int nValue = 100;
int* pValue = &nValue;
printf("%p,%p\r\n", &nValue, pValue);
return 0;
}
运行结果:两者的地址一致
内存中存储的数据
6. 学习视频地址:指针铺垫知识:计算机分级结构