硬件软件一盘棋

最近,在看linux源码,看的越多,突然想到了冯诺依曼架构中提到的计算机是由输入设备、输出设备、存储器(这里专指内存)、CPU组成的。其中CPU是有运算器和控制器构成的。上述说的是硬件,以前学习的时候都说一句话"硬件软件一盘棋",这句话的意思是硬件有的在一定程度上表现为软件。那么从冯诺依曼架构中提到的硬件对象,在C语言中表现的是什么呢?

首先,C语言函数内部有什么呢?

(1)各种变量:栈变量、堆内存、全局变量、再加上寄存器,这些变量对应的其实就是存储器,也就是内存。

(2)除了这些变量,还是各种运算:算术运算、逻辑运算、位运算、指针运算(地址运算)、赋值运算、逗号运算等,这些运算其实与CPU的组成中的运算器是对应的。运算器其实是一类器件,对应c语言中的各类运算。

(3)流程控制:分支判断:if-else switch-case,循环判断:while、do-while、for、还是有一些关键字,例如break、goto、return,这些其实对应的就是控制器。

其次,指针是C语言的灵魂,也就说指针运算是无处不在的,很多语法操作其实就是指针运算的某种"语法糖",这个与计算机非常擅长寻址操作有关系,或者这么说,计算机访问变量是使用到地址总线和数据总线共同作用实现的。

最后,