eclipse运行程序总是运行以前的代码_不懂底层的程序员不是好程序员,解密代码在计算机中运行原理...

程序与计算机的关系

还记得Windows的CMD吗?只需向这个黑框框输入指令,计算机即可做出相对应的响应。其实计算机的运行本身就是依靠向CPU下达一条一条的指令,并使计算机按指令运行。计算机指令就是指挥机器工作的指示和命令,程序就是一系列按一定顺序排列的指令,执行程序的过程就是计算机的工作过程。

计算机的核心就是CPU,其作用就如同人类的心脏。

计算机基本架构

想要了解程序如何在计算机中运行,以及C/C++编程中设计的内存、地址、指针等概念,就必须要先了解计算机的基本架构;

c26b89d84ff55dfd764550165f222057.png

计算机架构

CPU中主要由寄存器、时钟、CU(控制单元)、ALU(算术逻辑单元)

时钟:是对 CPU 内部操作与系统其他组件进行同步。

CU:协调参与机器指令执行的步骤序列。

ALU:执行算术运算以及逻辑运算。

CPU 通过主板上 CPU 插座的引脚与计算机其他部分相连。分别连接至数据总线、控制总线和地址总线。

寄存器:寄存器是有限存贮容量的高速存贮部件,它们可用来暂存指令、数据和位址。在中央处理器的控制部件中,包含的寄存器有指令寄存器(IR)和程序计数器(PC)。在中央处理器的算术及逻辑部件中,包含的寄存器有累加器(ACC)。在C++程序中向函数在实参传递时会将实参存入寄存器,需要反复重复使用的变量也最好放到寄存器中。

内存存储单元:狭义上的内存指的就是我们所说的内存条,但实际上 CPU 也不是直接操作内存的,因为其读写速度远远赶不上 CPU ,因此在内存和 CPU 之间还有“缓存”,如一级缓存、二级缓存, CPU 读取数据时操作的都是缓存。内存主要用于在程序运行时保存指令与数据。它接受来自 CPU 的数据请求,将数据从随机存储器 (RAM) 传输到 CPU,并从 CPU 传输到内存。

Cache:在寄存器和内存中间还有存在着一个叫Cache高速缓冲存储器。由于CPU的运行速度远高于内存读写速度,因此CPU如果直接从内存中存取数据就需要等待一定时间,但是Cache能保存着CPU刚用过或循环使用的一部分数据,这样当下次CPU使用该部分数据时可从Cache中直接调用,这样就减少了CPU的等待时间,提高了系统的效率。

四者之间的关系是:

8095e47319f528c1b9e2f46b0ba140b8.png

CPU寄存器缓存内存

代码执行流程

首先通过高级语言编写的程序,需要通过编译和链接翻译成计算机能识别的指令:

比如这样一行C语言代码:puts("VIP会员");,在计算机执行时却是10110000 10101011 00110001 00011100 00110011 00111110 01010011 11110000;

编译流程如图:

9c46e528252c52a35c813afadaeff563.png

编译流程

程序执行的流程可以简单归纳为:取指 (Fetch)、译码 (Decode) 和执行 (Execute)

例如:要执行a = b +c;有两个输入操作数 (b 和 c),—个输岀操作数 (a)。

1、将编译过代码读取缓存区

2、将代码编译成计算机指令

3、CPU 从指令队列区域取得指令,并立即增加指令指针的值。

4、CPU 对指令的二进制位模式进行译码。这种位模式可能会表示该指令有操作数(输入值)。

5、CPU 从寄存器和内存中取得操作数。这步可能会包含地址计算。

6、使用步骤 3 得到的操作数,CPU 执行该指令。同时更新部分状态标志位,如零标志 (Zero)、进位标志 (Carry) 和溢出标志 (Overflow)。

7、输出操作数,若输出也是指令的一部分CPU 还需要存储其结果操作数。

ce58c5dfc94f752d6475e8c0994a9dd2.png

代码执行原理

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值