汇编和可执行文件(Po学校 计算机科学笔记整理)
2017-12-15 10:28
232 查看
1.程序从编译到运行的过程是怎么样的?
源代码——(编译)——obj文件——(链接)[PE 结构]——可执行文件
链接的原因:软件之所以能够实现功能,是因为软件操作硬件,而我们的编程实际上是在一个比较高的维度构筑一个算法。而在底层的东西,例如操纵内存等等一些都是不需要考虑的。这些和底层交互的任务都交给操作系统了。(系统封装好的api,就是和底层做交互任务的函数),所以我们的源代码中链接的东西,也就是这些api。最终的可执行文件也就包含了这些api函数的功能,就能正常的与底层做交互了。
2.编译可以分为两种,一种是调试编译(Debug),一种是发行编译(Release)。
调试编译:每一段代码都会生成汇编语句。
发行编译:对代码进行优化,废代码不生成汇编语言。所以在调试的时候最好用调试编译,因为可以很好的一一对应。
3.程序运行时的内存情况。
内存四区:栈,堆,代码区,常量区。
其中,代码区和常量区是只读的(被保护起来),如果指针向这块区域里面写东西,系统会报错。
4.栈是可增长的。
栈溢出:由于过多的函数调用,导致调用堆栈无法容纳这些调用的返回地址,一般在递归中产生。堆栈溢出很可能由无限递归(Infinite
recursion)产生。(自动释放空间)
堆溢出:内存泄漏。(程序员自己释放空间)
源代码——(编译)——obj文件——(链接)[PE 结构]——可执行文件
链接的原因:软件之所以能够实现功能,是因为软件操作硬件,而我们的编程实际上是在一个比较高的维度构筑一个算法。而在底层的东西,例如操纵内存等等一些都是不需要考虑的。这些和底层交互的任务都交给操作系统了。(系统封装好的api,就是和底层做交互任务的函数),所以我们的源代码中链接的东西,也就是这些api。最终的可执行文件也就包含了这些api函数的功能,就能正常的与底层做交互了。
2.编译可以分为两种,一种是调试编译(Debug),一种是发行编译(Release)。
调试编译:每一段代码都会生成汇编语句。
发行编译:对代码进行优化,废代码不生成汇编语言。所以在调试的时候最好用调试编译,因为可以很好的一一对应。
3.程序运行时的内存情况。
内存四区:栈,堆,代码区,常量区。
其中,代码区和常量区是只读的(被保护起来),如果指针向这块区域里面写东西,系统会报错。
4.栈是可增长的。
栈溢出:由于过多的函数调用,导致调用堆栈无法容纳这些调用的返回地址,一般在递归中产生。堆栈溢出很可能由无限递归(Infinite
recursion)产生。(自动释放空间)
堆溢出:内存泄漏。(程序员自己释放空间)
相关文章推荐
- 程序与CPU(PO学校 计算机科学 笔记整理)
- 二进制 (Po学校 计算机科学 笔记整理 )
- 操作系统 (Po学校 计算机科学 笔记整理)
- 1.预处理,生成预编译文件(.文件): Gcc –E hello.c –o hello.i 2.编译,生成汇编代码(.s文件): Gcc –S hello.i –o hello.s 3.汇编,生成目标文件(.o文件): Gcc –c hello.s –o hello.o 4.链接,生成可执行文件: linux笔记
- 用PyInstaller将python转成可执行文件exe笔记
- Android Studio分类整理res/Layout中的布局文件 (笔记4)
- PHP学习笔记--字符串操作 作者:yezi33 字符串的整理: trim():除去字符串开头和末尾的空格或其他字符。函数执行成功时返回删除了string字符串首部和尾部空格的字符串,发生错误时返回空
- win32汇编 屏幕截图保存BMP 学习笔记<第四篇>之生成BMP文件
- 汇编语言笔记整理(一)
- mybatis整理笔记MapperXML文件2 -- MapperXML文件中的insert, update and delete[文章摘自文档]
- Win32可执行文件的开发过程 - Win32汇编语言008
- sql server 关于表中只增标识问题 C# 实现自动化打开和关闭可执行文件(或 关闭停止与系统交互的可执行文件) ajaxfileupload插件上传图片功能,用MVC和aspx做后台各写了一个案例 将小写阿拉伯数字转换成大写的汉字, C# WinForm 中英文实现, 国际化实现的简单方法 ASP.NET Core 2 学习笔记(六)ASP.NET Core 2 学习笔记(三)
- Unix整理笔记——文件系统——里程碑M4
- 反病毒木马笔记之jpg可执行文件的exe
- 《程序员自我修养》阅读笔记-可执行文件装载与进程
- 函数调用的原理4点:函数产生名不同,压栈顺序不同,不应由客户清理,客户清理则可执行文件大小更大(许多参考文章,有汇编解释)
- CUBRID学习笔记 28 执行sql脚本文件
- Xcode执行项目整理——main方法简单笔记
- 32位汇编语言学习笔记(45)--测试简单文件操作接口(完)
- 【GDB调试学习笔记】Makefile生成多个可执行文件