首页 > 编程语言 >程序是怎样跑起来的(第八章)

程序是怎样跑起来的(第八章)

时间:2024-02-27 23:02:03浏览次数:26  
标签:文件 EXE 代码 程序 第八章 编译器 源代码 怎样

用某种编程语言编写的程序称为源代码,将源代码保存成一个文件就称为源文件。C语言的源文件扩展名约定为“.C”。代码清单的源代码是不能直接运行的,因为CPU能直接解释和执行的只有本机代码。CPU是计算机的大脑,他只能理解本机代码形式的程序。不同编程语言所编写的源代码翻译成本机代码之后就变成了同一种语言。转储是指将文件内容按1字节2位十六进制数的形式显示出来,本机代码的内容就是数值序列。这就是本机代码的本质。负责将用C语言等高级语言编写的源代码翻译成本机代码的程序称为编译器。编译器会读取源代码的内容并将其翻译成本机代码。编译器需要对读取的源代码进行司法分析、语法分析、语义分析等处理,这样才能够生成本机代码。CPU的类型不同,其对应的本机代码也不同。因此,不仅不同的编程语言所使用的编程编译器不同,不同类型的CPU所使用的编辑器也不同。编译器本身也是一种程序,因此也有其对应的运行环境。
作为元代码的翻译结果,编译器生成的是包含本机代码的文件,但这个文件不能直接运行。要得到可执行的EXE文件,在编译之后还需要进行链接操作。将多个目标文件拼接在一起生成一个EXE文件的过程称为链接,用于完成这一操作的程序为链接器。一些通用代码需要链接在所有程序的开头,这些代码被称为启动代码。因此,即便一个程序没有调用位于其他目标文件中的函数,也必须连接启动代码。库文件是由多个目标文件打包而成的。在连接时指定库文件,连接器就可以从中提取所出的所需的目标文件,并将其与其他目标文件一起连接生成EXE文件。不包含在源代码中,而是以库文件的形式随编译器一起被分发的。这样的函数称为标准函数。
windows API的目标文件通常不是以库文件的形式存在的,而是以一种称为DLL的特殊库文件的形式存在的。与之相对,包含目标文件本身,可以直接链接到EXE文件的库文件称为静态链接库。EXE文件作为一个独立的文件存储在硬盘中,当我们在资源管理器中双击EXE文件时,EXE文件中的内容会被加载到内存并运行。在EXE文件中,变量和函数被分配的内存地址都是虚拟的,在程序运行时,这些虚拟的内存地址会转换成实际的内存地址。链接器会在EXE文件的开头记录需要进行内存地址转换的各个位置,这些信息被称为重定位信息。重定位信息中记录的是变量和函数的相对地址,所谓相对地址,就是某个地址与基地址之间的相对距离,也就是偏移量。
栈是用来存放函数内部临时使用的变量以及调用函数时传递的参数等数据的内存空间。堆是在程序运行时用来存放任意数据的内存空间。EXE文件中并不包含栈和堆的区别EXE文件加载到内存并运行的那一刻,栈和堆所需的内存空间才得到分配。无论是C语言还是C++,如果不是在程序中显式地释放堆空间,那在程序运行结束后,这些空间就依然处于占用状态,这一现象称为内存泄露,如果内存泄露一直存在,就有可能造成内存不足,从而导致宕机。

标签:文件,EXE,代码,程序,第八章,编译器,源代码,怎样
From: https://www.cnblogs.com/HYH16/p/18038600

相关文章

  • 《程序是怎样跑起来的》第六章
    读书笔记:6.1:在文件中存储数据的基本单位是1字节(8比特);zip表示压缩文件;zip是Windows标准支持的压缩文件扩展名。半角英文、数字和符号都是用1字节表示的,汉字等全角字符用2字节表示。.BMP格式的图片文件是没有经过压缩的,因此比PNG等压缩格式的图片文件要大。文件是字节数据的集......
  • 程序是怎样跑起来的(第七章)
    程序在怎样的环境下运行每个程序都有其对应的运行环境。程序的运行环境是通过操作系统和硬件(处理器、内存等)来表示的,也就是说,操作系统和硬件决定了程序的运行环境。一台计算机可以安装多种操作系统,因为操作系统有很多版本,有些应用程序可能只在特定版本的操作系统中运行。将硬件作......
  • 《程序是怎样读起来的》第九章读后感
    读完《程序是怎样读起来的》的第九章,我深感启发。这一章主要探讨了如何有效地阅读和理解复杂的程序代码,对于提升我的编程能力和解决问题的能力有着很大的帮助。首先,这一章强调了阅读代码的重要性。在编程过程中,我们往往花费大量时间编写代码,但却很少花时间去阅读和理解别人的代码......
  • 《程序是怎样跑起来的》第十章读后感
    在阅读《程序是怎样跑起来的》第十章后,我对于程序运行的底层机制有了更为深入的理解。这一章主要探讨了程序如何在操作系统的管理下运行,以及操作系统如何提供各种服务来支持程序的运行。首先,我了解到程序在运行过程中,需要经过一系列的步骤,包括编译、链接、加载等。这些步骤都是为......
  • 《程序是怎样跑起来的》第十一章读后感
    在阅读《程序是怎样跑起来的》第十一章后,我对于程序的运行和计算机的工作原理有了更为深入的理解。这一章主要探讨了计算机的硬件架构以及程序如何在硬件上实现并行计算,对于我理解计算机系统的底层实现具有很大的帮助。首先,这一章介绍了计算机的硬件架构,包括CPU、内存、硬盘、显......
  • 《程序是怎样跑起来的》第四章
    本章主要讲内存,计算机是进行数据处理的设备,而程序表示的就是处理顺序和数据结构。由于处理对象数据是存储在内存和磁盘上的,因此程序必须能自由地使用内存和磁盘。由此可见内存的重要性。内存实际上是一种名为内存IC的电子元件,内存IC中有电源、地址信号、数据信号、控制信号等用......
  • 《程序是怎样跑起来的》第八章读后感
    《程序是怎样跑起来的》第八章主要讲了从源文件到可执行文件,其中包括计算机只能运行本地代码,本地代码的内容,编译器负责转换源代码,仅靠编译是无法得到可执行文件的,启动及库文件,DLL文件及导入库,可执行文件运行时的必要条件,程序加载时会生成栈和堆,有点难度的Q&A九个章节,其中我学到CPU......
  • 《程序是怎样跑起来的》第八章读后感
    读完《程序是怎样跑起来的》第八章,我对计算机的工作原理和程序的执行过程有了更深入的理解。这一章节详细介绍了程序在计算机中的运行机制,包括指令的执行、数据的处理和内存的管理等方面。通过阅读这一章,我不仅了解了计算机的基本工作流程,还对编程语言的本质有了更深刻的认识。首......
  • 《程序是怎样跑起来的》第五章
    读书笔记:5.1:1.磁盘缓存指将从磁盘中读取的数据暂时保存在内存中,当需要再次读取相同的数据时,就可以不访问磁盘,而是直接从内存中快速读取。1.虚拟内存可以让内存容量小的计算机运行大型程序。.DLL是DynamicLinkLibrary(动态链接库)的缩写。.函数的链接方式分为静态链接和动态链接......
  • 《程序是怎么跑起来的第六章》
    《程序是怎样跑起来的》第六章主要讲述的是关于数据压缩的内容。在这一章中,作者首先介绍了文件是以字节为单位存储在计算机中的,并详细讲解了压缩的一种方式——游程编码,也就是将连续重复的数据转换成“数据*重复次数”的形式。接下来,作者进一步阐述了RLE算法的机制及其局限性,这种......