首页 > 编程语言 >对于可执行文件的产生和运行过程的认知(《程序时怎样跑起来的》第8章)

对于可执行文件的产生和运行过程的认知(《程序时怎样跑起来的》第8章)

时间:2024-02-20 22:34:59浏览次数:29  
标签:可执行文件 文件 函数 认知 程序 DLL 源代码

在阅读《程序时怎样跑起来的》第八章后,我认识到了源文件变为可执行文件的过程,包括必备的因素和运行的条件。源文件指的是程序员利用高级语言写的代码文件,而在第七章中提到,CPU能识别的是本地代码也叫机器语言,而源文件到本地代码的过程就叫做“编译”,通常利用对应语言的编译器进行编译。但是在编译过后依然不能直接执行,因为在编写代码时,会出现部分代码是直接引用“库中的”函数,而非程序员自己写的,因此在编译源代码时这些库中的函数并不会被计算机读懂,因为计算机无法通过函数表面去看函数所对应的源代码,因此在部分情况下是需要将库中函数(也叫做标准函数)的源代码“一同告知计算机,这就是链接,是通过链接器来进行的。
而且,即使我们不指定引用函数的目标文件,计算机也会自动识别的,因为引用标准函数的文件的后缀是.lib。通过这一点,计算机就会自动找到对应目标文件了。但是在部分情况下,有些函数也并非标准函数,就如书中所说的MessageBox()这个函数是Windows系统的弹窗程序,储存在DLL文件中,而DLL文件并不在库文件,因此,如果遇到使用API程序的源代码,也需要将对应函数的目标文件进行链接,这种文件叫导入库(但实际并不在库中,而是在DLL文件中),因此这种文件相对于库文件来说并非实体,只是当你输入目标文件名时,他不会在库中找到目标文件,而是在DLL文件中找,因此能够直接在库中找到文件的形式叫做静态链接库。
并且再运行程序时是调用程序数据在内存中的地址,由于EXE可执行文件作为本地代码,没有被分配地址,因此会分配虚拟地址,调用时将虚拟地址转变为实际地址,添加再分配信息,如此EXE文件就有了相对地址(以函数起始位置为基点进行偏移),同时在可执行文件运行时,会开辟新的内存空间,分别为栈和堆。他们二者的功能不一,栈空间存储临时变量,当超过所在作用域时会自动清除。而堆空间中存储的是运行中的任意数据和对象,这一则需要程序员手动清理,否则会出现内存泄露,久而久之导致内存不足。

标签:可执行文件,文件,函数,认知,程序,DLL,源代码
From: https://www.cnblogs.com/xhsbk/p/18024179

相关文章

  • 《程序是怎样跑起来的》第四章读后感
    《程序是怎样跑起来的》第四章的内容主要讲的是熟悉使用有棱有角的内存。读了第四章内容,我学到了内存的物理机制是什么,内存的逻辑模型,数组等知识。内存实际上是一种名为内存IC的电子元件。虽然内存IC包括DRAM、SRAM、ROM”等多种形式,但从外部来看,其基本机制都是一样的。内存IC中......
  • 《程序是怎样跑起来的》第七章:程序在何种环境中运行
    这一章深入浅出地解析了操作系统、硬件、编译器等重要元素,以及它们如何协同工作以支持程序的运行。在程序运行的大环境中,操作系统无疑扮演着关键的角色。它不仅管理着硬件资源,如CPU、内存和存储,还负责提供一种机制使得多个程序能够安全、有效地共享这些资源。通过操作系统,程序可以......
  • 《程序是怎样跑起来的》第八章:从源文件到可执行文件
    在这一章中,作者详细地解释了如何将源代码转化为可执行文件,这个看似简单的讨程实际上包含了多个复杂的步骤。源代码,作为程序的起点,虽然已经包含了实现特定功能的代码,但它本身并不能直接运行。为了让它能在计算机上运行,需要经过一系列的编译和链接过程。这包括词法分析、语法分析、......
  • 程序是怎样跑起来的第八章读后感
    在阅读第八章后,我对程序的内存管理有了更深入的理解。这一章详细介绍了内存的分配和释放机制,以及如何避免内存泄漏和内存溢出等问题。我认识到了内存管理对于程序的重要性。不合理的内存使用可能导致程序性能下降、崩溃甚至出现安全漏洞。通过学习本章内容,我了解到了不同的内存分......
  • 读程序是怎样跑起来的第八章有感
    《程序是怎样跑起来的》第八章通过深入浅出的方式,解答了我对于现代编程语言特性的困惑。作者详细解释了现代编程语言背后的工作原理,以及为什么这些特性如此重要。我对第八章中关于“动态类型语言与静态类型语言”的论述印象深刻。我之前一直觉得这两者间的区别只是形式上的,但作者......
  • 【C++】判断回文字符串。回文指的是顺读和逆读都一样的字符串。例如,“tot”和“otto”
    //判断字符串是否是回文字符串(考虑大小写,空格和标点符号)boolpalindrome1(string&str){stringret;for(auto&c:str){if(isalpha(c)){if(isupper(c)){ret.push_back(tolower(c));}else{ret.push_back(c);}......
  • 《程序是怎样跑起来的》第八章的读后感
    又到了读书分享的时候,本篇分享《程序是怎样跑起来的》第八章的读后感,从源文件到可执行文件。Windows中的EXE文件的程序内容使用的就是本地代码。能够把C语言等高级编程语言编写的源代码转换成本地代码的程序称为编译器,将C语言编写的源代码换成本地代码的编译器称为C编译器。把多......
  • 《程序是怎样跑起来的》第九章
    心得:了解了操作系统和应用以及Windows知识点:1、操作系统监控程序的主要功能是程序的加载和运行,监控程序也可以说是操作系统的原型。操作系统也称为基础软件,操作系统是计算机运行时不可或缺的控制程序,以及在控制程序下运转的为其他软件运行提供操作环境的软件的统称。操作系统本......
  • 源文件到可执行文件的过程
    从用户编写的源文件到生成可执行程序,需要经过以下四个中间过程:预处理:预处理过程主要处理源代码文件中的#include、#define、#if、#else、#ifdef、#endif等指令,以及处理注释、行号(用于调试)等工作。编译:编译是构建可执行程序过程中最重要的步骤,涉及词法分析、语法分析、语义分析......
  • “薪”的一年程序员裁员潮技术变革情况下 程序员就业机会在哪里?
    引言:一对来自中国的工程师夫妻在美国的不幸身亡,疑似与谷歌的裁员有关,这一事件再次引发了人们对技术变革下裁员对程序员影响的关注。一、针对裁员潮的一些看法在我看来,技术变革对程序员的影响是双面的。一方面,技术变革意味着程序员需要不断学习新技术,提升自己的技能,以适应市场需......