程序是如何运行的

2020-02-11  本文已影响0人  Super曲江龙Kimi

程序编译和程序解释

计算机是理解不了人类的语言、同样也理解不了高级编程语言的,CPU能直接解析并运行的不是源代码而是本地机器代码


image.png

本地代码:


image.png

所以要保证高级编程语言能够正常运行,则需要进行程序的编译或者解释。

编译: 在运行之前将源代码转换成机器代码:C 、 C++。完成此过程的叫做编译器
解释: 在运行时进行源代码转换成机器代码: JS、PHP

JAVA既有编译过程也有解释过程
先编译成JVM字节码在JVM虚拟机下解释成机器代码

这样的好处就是一套源代码可以在不同CPU、不同操作系统下都编译成可以执行的机器代码。


image.png

链接

程序编译后并不一定可以直接使用,需要经过链接。因为编译后程序中使用的一些公共函数都在库文件(.lib文件其中存放着真正的函数文件DLL的路径)中,需要链接进来,将多个文件整合成一个exe文件的过程就是链接。


image.png

程序加载至内存

经过链接后生成的exe文件中的代码被加载到内存中执行,在内存中会开辟存储空间。包含运行时生成的栈和堆。函数中的临时变量在栈中,全局变量等都在堆中。


image.png

栈中的数据在函数执行完后会自动释放,而堆中的数据需要程序编写释放。否则会发送内存泄漏


image.png

汇编语言

汇编语言是更接近底层的语言,和本地机器语言是一一对应的。通过用助记符来表示一些操作。用汇编语言写的源代码也需要转换成机器代码执行,这一过程叫做汇编,而将机器语言转换回汇编语言叫做反汇编

image.png

C语言等高级语言可以通过编译器直接转换成机器语言,也可以通过特殊的编译器先转换成汇编语言。

上一篇下一篇

猜你喜欢

热点阅读