程序是如何运行的
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
汇编语言
汇编语言是更接近底层的语言,和本地机器语言是一一对应的。通过用助记符
来表示一些操作。用汇编语言写的源代码也需要转换成机器代码执行,这一过程叫做汇编
,而将机器语言转换回汇编语言叫做反汇编
C语言等高级语言可以通过编译器直接转换成机器语言,也可以通过特殊的编译器先转换成汇编语言。