冯诺依曼和数据存储位置

一、冯诺依曼体系结构

现代计算机多采用冯诺依曼体系结构,将计算机在逻辑上划分为五部分:
冯诺依曼和数据存储位置
在控制器的控制下完成计算机的整体运作,冯诺依曼体系结构的一大特点是存储程序,强调程序指令和数据以无差别的二进制形式存储在存储器中,这就保证了我们可以将自己编写的程序写入计算机并执行。运算器实现对数据的处理,包括数据的算数了逻辑运算但本质上都是通过二进制位的运算来实现。控制器负责取指令、解析指令、执行指令。通常在控制器、运算器和存储器的配合下就能完成按照程序指令逐步完成对数据的操作。
现代计算机将控制器和运算器构成一个模块,就是通常所说的CPU。在一个计算机中,CPU和存储器是最为重要的,数据和程序的存储、程序的执行、数据的处理都能通过这两部分实现。
在CPU中为了实现控制器和运算器的功能,设计了多个寄存器。寄存器是硬件结构,通常用于暂时存储数据。
这样,在计算机中我们用于存储数据的地方有两个:存储器和寄存器。

二、数据存储位置

首先是寄存器,例如32位通用寄存器EAX:
冯诺依曼和数据存储位置
可以存放32位二进制。
寄存器通常是程序执行过程中临时保存运算的中间量,程序要运行总是要加载到内存中,所以相对于寄存器,我们在编程时更关注内存。
内存指内部存储器,而像磁盘、硬盘是外部存储器。但特别注意我们在代码中所使用的内存,并非指物理内存而是操作系统在物理内存中抽象出来的一块连续的逻辑内存空间。
计算机程序向内存写入或从内存中读取数据,但并非随意使用,内存的使用通常会按内存单元为单位进行操作。
一块逻辑上连续的内存由多个内存单元构成:
冯诺依曼和数据存储位置
通常是按字节编址按字节寻址,即每8位二进制作为一个单元(字节)。我们所说的内存地址就是指某个内存单元的编号。
计算机一次操作的内存空间大小通常是字节的整数倍,也就是一次操作若干个内存单元。所以计算机中的数据单位有位(bit)、字节(byte)、字(word,2字节16位)、双字(Dword,2字32位也就是通用寄存器最长二进制位数)相应的内存地址是指第一个字节对应的内存单元地址。
C/C++中对内存的操作是非常重要的,无论是普通变量还是指针变量的使用都需要理解内存中数据的存储形式。因此,首先要建立这种以字节为单位的逻辑内存结构,要注意的是这只是在逻辑上对数据进行了划分,在真正的二进制串的存储中并不按8位为单元进行区分,而是连续的无差别二进制串。