首页 > 其他分享 >从源文件到可执行文件

从源文件到可执行文件

时间:2024-02-22 19:44:06浏览次数:21  
标签:可执行文件 文件 EXE 代码 内存空间 源文件 编译器 源代码

源代码:用某种编程语言编写的程序 ; 源文件:保存源代码的文件
用C语言编写的源文件的扩展名通常是“.c”。源文件是简单的文本文件,windows自带的记事本即可编写。

CPU能直接解释并运行本地代码而不是源代码。用任何编程语言编写的源代码,最后都要翻译成本地代码,否则CPU无法理解,

本地代码的内容人类无法理解,所以才有了C语言等编程语言来编写源代码,在转化为本地代码

Dump:把文件的内容,每个字节用二位十六进制数表示的方法。本地代码就是各种数值的罗列,这些数值就是本地代码的真面目。每个数值都表示一个命令或数据。

编译器:把源代码转换成本地代码的程序。

CPU不同,本地代码的类型也不同,编译器与CPU有关,也与编程语言的种类有关。

编译器本身也是程序的一种,也需要运行环境

交叉编译器:生成的是和运行环境中的CPU不同的CPU使用的本地代码。

编译器三个关键词(1)何种编程语言 (2)哪种cpu (3)运行环境

仅靠编译是无法得到可执行文件的
编译器将源代码转换成本地文件后,此时本地文件无法直接运行,得到可以运行的EXE文件
编译后还需要进行“链接处理” 编译后生成的不是EXE文件,而是扩展名为“.obj”的目标文件。虽然目标文件的内容是本地代码,但是当前程序还处于未完成状态。

把多个目标文件结合,生成一个EXE文件的处理就是链接。 运行链接的程序就是链接器。

库文件指的是把多个目标文件集成保存在一个文件中的形式

Windows以函数的形式为应用提供了各种功能。这些形式的函数称为API
API储存在DLL文件的特殊库文件中, DLL是程序运行时动态结合的文件

EXE文件作为单独的文件储存在硬盘中。 EXE文件中给变量及函数分配了虚拟的内存地址,程序运行时,虚拟转换成实际的。 链接器会在EXE文件开头追加转换内存地址所需的必要信息(再配置信息)

再配置信息就成为了变量和函数的相对地址。相对地址表示的是相对于基点地址的偏移量,就是相对距离

程序加载时生成栈和堆
程序加载到内存后,额外生成两个组,栈和堆。
栈:储存函数内部临时使用的变量,以及函数调用时所用的参数的内存区域
堆:存储程序运行时的任意数据及对象的内存区域

EXE文件中不存在栈和堆,栈和堆需要的内存空间是在EXE文件加载到内存后开始运行时得到分配的。

因此,内存中的程序,就是由用于变量的内存空间、用于函数的内存空间、用于栈的内存空间、用于堆的内存空间四部分构成。

栈中对数据进行存储或舍弃的代码,由编译器自动生成,不需要程序员参与;但是堆需要。

程序中如果没有明确释放堆的内存空间,那么即使处理完,该内存空间也会残留,这个现象叫内存泄漏。

标签:可执行文件,文件,EXE,代码,内存空间,源文件,编译器,源代码
From: https://www.cnblogs.com/zhhhhh/p/18028023

相关文章

  • 从源文件到可执行文件
        对于本章,首先我们需要了解源代码和源文件,用某种编程语言编写的程序,就是源代码保存源代码的文件就是源文件,而且用C语言编写的源文件的扩展名通常是".c"。但若想要程序运行还需要将源代码转换成本地代码,因为计算机的"大脑"CPU能直接解析的是本地代码。既然我们知道了,要转......
  • 《程序是怎样跑起来的》——第8章 从源文件到可执行文件
    一、代码1、源代码完成后,就可以编译生成可执行文件了。负责实现该功能的是编译器2、代码运行:计算机只能运行本地代码。3、源代码和源文件:用某种编程语言编写的程序就称为源代码,保存源代码的文件称为源文件。(这里的“源代码”用英文表示是“sourcecode”。source有“原始的”......
  • 对于可执行文件的产生和运行过程的认知(《程序时怎样跑起来的》第8章)
    在阅读《程序时怎样跑起来的》第八章后,我认识到了源文件变为可执行文件的过程,包括必备的因素和运行的条件。源文件指的是程序员利用高级语言写的代码文件,而在第七章中提到,CPU能识别的是本地代码也叫机器语言,而源文件到本地代码的过程就叫做“编译”,通常利用对应语言的编译器进行编......
  • 《程序是怎样跑起来的》第八章:从源文件到可执行文件
    在这一章中,作者详细地解释了如何将源代码转化为可执行文件,这个看似简单的讨程实际上包含了多个复杂的步骤。源代码,作为程序的起点,虽然已经包含了实现特定功能的代码,但它本身并不能直接运行。为了让它能在计算机上运行,需要经过一系列的编译和链接过程。这包括词法分析、语法分析、......
  • 源文件到可执行文件的过程
    从用户编写的源文件到生成可执行程序,需要经过以下四个中间过程:预处理:预处理过程主要处理源代码文件中的#include、#define、#if、#else、#ifdef、#endif等指令,以及处理注释、行号(用于调试)等工作。编译:编译是构建可执行程序过程中最重要的步骤,涉及词法分析、语法分析、语义分析......
  • 第八章——从源文件到可执行文件
    本章讲解的是源文件如何通过编译转换为可执行文件的。首先计算机只能运行本地代码。用某种编程语言编写的程序就称为源代码,保存源代码的文件被称为源文件。源代码是无法直接运行的,因为CPU能直接解析和运行的不是源代码而是本地代码。本地代码的内容就是各种数值的罗列。编译器负......
  • java的getResource方法 总结一下 在Java中获取资源的时候,经常用到getResource和getRes
    java的getResource方法总结一下在Java中获取资源的时候,经常用到getResource和getResourceAsStream,本文总结一下这两种获取资源文件的路径差异1.前言在Java中获取资源的时候,经常用到getResource和getResourceAsStream,本文总结一下这两种获取资源文件的路径差异。2.Class.get......
  • 第八章:从源文件到可执行文件
    在《程序是怎样跑起来》的第八章中,作者详细介绍了程序从源文件到可执行文件的整个过程。这一章节通常涉及到编译原理和链接技术,对于理解程序的生命周期和执行过程至关重要。以下是我对这一章节的读后感:首先,本章可能从源代码的编写开始,介绍了编程语言的基本概念。源代码是人类可读......
  • 在windows下打包linux可执行文件
    尝试set命令设置环境变量,然后执行打包,但是打包出来还是windows文件命令行直接设置:在运行 gobuild 命令之前,在同一命令行窗口中先设置环境变量,并确保在同一行内设置以确保它们在同一环境中生效CGO_ENABLED=0GOOS=linuxGOARCH=amd64gobuild-omyapp-linux-amd64main.go......
  • 【WPF】Xaml调用.resx资源文件,多语言翻译
    参考文章:https://blog.csdn.net/u010839204/article/details/103932044本文在该文章的基础上进行了“改进” 这个是基类库,基本处理均在基类库里面完成。须注意StringResources.resx名字和StringResourcesExtension前部分名字须保持一致。类 StringResourcesExtension:nam......