前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >不懂底层的程序员不是好程序员,解密代码在计算机中运行原理

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

作者头像
IT大咖说
发布2019-12-26 16:29:22
1.3K0
发布2019-12-26 16:29:22
举报
文章被收录于专栏:IT大咖说IT大咖说

程序与计算机的关系

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

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

计算机基本架构

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

计算机架构

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的等待时间,提高了系统的效率。

四者之间的关系是:

CPU<->寄存器<->缓存<->内存

代码执行流程

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

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

编译流程如图:

编译流程

程序执行的流程可以简单归纳为:取指 (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 还需要存储其结果操作数。

代码执行原理

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-12-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 IT大咖说 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 程序与计算机的关系
  • 计算机基本架构
  • 代码执行流程
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档