汇编和可执行文件(Po学校 计算机科学笔记整理)

版权声明:本文为博主原创文章,转载请注明来源 https://blog.csdn.net/C1664510416/article/details/78810169

1.程序从编译到运行的过程是怎么样的?

源代码——(编译)——obj文件——(链接)[PE 结构]——可执行文件

链接的原因:软件之所以能够实现功能,是因为软件操作硬件,而我们的编程实际上是在一个比较高的维度构筑一个算法。而在底层的东西,例如操纵内存等等一些都是不需要考虑的。这些和底层交互的任务都交给操作系统了。(系统封装好的api,就是和底层做交互任务的函数),所以我们的源代码中链接的东西,也就是这些api。最终的可执行文件也就包含了这些api函数的功能,就能正常的与底层做交互了。


2.编译可以分为两种,一种是调试编译(Debug),一种是发行编译(Release)。

调试编译:每一段代码都会生成汇编语句。

发行编译:对代码进行优化,废代码不生成汇编语言。所以在调试的时候最好用调试编译,因为可以很好的一一对应。


3.程序运行时的内存情况。

内存四区:栈,堆,代码区,常量区。

其中,代码区和常量区是只读的(被保护起来),如果指针向这块区域里面写东西,系统会报错。


4.栈是可增长的。

栈溢出:由于过多的函数调用,导致调用堆栈无法容纳这些调用的返回地址,一般在递归中产生。堆栈溢出很可能由无限递归(Infinite recursion)产生。(自动释放空间)

堆溢出:内存泄漏。(程序员自己释放空间)

猜你喜欢

转载自blog.csdn.net/C1664510416/article/details/78810169