心得:了解了本地代码、源文件、导入库等,更细致的了解了栈,遇到了堆
知识点:
- 本地代码
CPU可以解析和运行的程序形式称为本地代码。可以通过编译源代码得到本地代码。扩展名为.obj的目标文件的内容属于本地代码。Windoows中EXE文件的程序内容,使用的就是本地代码。本地代码的内容就是各种数值的罗列,Dump是指把文件的内容每个字节用两位16进制数来表示的方法,这些数值就是本地代码的真面目 - 源文件
用某种编程语言编写的程序,就称为源代码。保存源代码的文件称为源文件。用C语言编写的源文件的扩展名通常是“.c”。源文件是简单的文本文件,用Windows系自带的记事本等文本编辑器就可以编写。CPU直接解释并运行的是本地代码的程序。用任何编程语言编写的源代码,最后都要翻译成本地代码,否则CPU就不能理解
3.编译器
能够把C语言等高级编程语言编写的源代码转换成本地代码的程序,称为编译器。根据CPU类型的不同,本地代码的类型也不同,因而,编译器不仅和编程语言的种类有关,和CPU的类型也是相关的。编译器本身也是程序的一种,需要运行环境。除了常见的几种c编译器外,还有一种交叉编译器,它生成的是和运行环境中的CPU不同的CPU所使用的本地代码 - 可执行文件
为了得到可以运行的EXE文件,编译之后还需要进行“链接”处理。“_W_c”是用来指定编译Windows用的程序的选项.选项是对编译器的指示,有时也称为"开关"。编译后生成的不是EXE文件,而是扩展名为.obj的目标文件。把多个目标文件结合,生成一个EXE文件的处理就是链接,运行连接的程序就称为链接器(linkage editor或连结器)BorlandC++的连接器就是ilink32.exe命令行工具 - 库文件
库文件指的是把多个目标文件集成保存到一个文件中的形式。外部符号是指其他目标文件中的变量或函数。不是通过源代码形式而是通过库文件形式和编译器一起提供的函数称为标准函数
6.DLL文件和导入库
Windows以函数的形式为应用提供了各种功能,这些形式的函数称为API(应用程序接口)。Windows中API的目标文件是存储在名为DLL文件的特殊库文件中。存储着目标文件的实体,并直接和EXE文件结合的库文件形式称为静态链接库 - 再配置信息:在程序运行时,虚拟的内存地址会转换成实际的内存地址,链接器会在EXE文件的开头追加转换内存地址所需的必要信息。这个信息称为再配置信息
- 栈和堆
栈是用来存储函数内部临时使用的变量(局部变量),以及函数调用时所用的参数的内存区域。堆是用来存储程序运行时的任意数据及对象的内存领域。他们的内存空间都是在程序运行时得到申请分配的。但是栈不需要程序员的参与,每当函数被调用时,都会得到申请分配,并在函数处理完毕后自动释放;堆的内存空间则要根据程序员编写的程序来进行申请分配或释放。无论是C语言还是C++,如果没有在程序中明确释放堆的内存空间,那么即使在处理完毕后,该内存空间仍会一直残留,这个现象称为内存泄露 - ······