首页 > 编程语言 >《程序是怎样跑起来的》第八章读后感

《程序是怎样跑起来的》第八章读后感

时间:2024-02-26 22:33:39浏览次数:31  
标签:读后感 函数 程序运行 文件 程序 内存空间 第八章 编译 可执行程序

本地代码: 本地代码的内容就是数值的罗列集合(二进制的数据展示)。
编译器: 负责将源代码转换为本地代码,每种语言都有其专用的编译器。
由于 cpu 类型不同,本地代码的类型也不同,编译器可以将源代码编译成不同 cpu 类型的本地代码。
交叉编译: 在当前平台编译另外平台的本地代码,例如在 win 上编译 linux 平台运行的本地代。
编译器转换源代码后就会生成本地文件,这个文件不能直接运行(处于未完成状态),还需要进行链接处理。
链接器: 将多个目标文件结合,生成最终的可执行程序,这个处理过程称为链接
需要链接的原因: 将源代码编译后只是对程序员书写的代码进行了编译,还需要将在源代码中进行引入的库文件,函数这些引入的功能进行编译整合在一起,整合后的文件才是完整的执行程序,因此需要进行链接操作。当前的语言通常在编译的同时进行了链接,因此只需要编译后就可以得到可执行程序。
库文件: 把多个目标文件集成保存到一个文件中的形式,链接器指定库文件后会将需要用到的库文件函数提取出来与其它目标文件结合生成可执行程序
标准函数: 不是通过源码形式,而是通过库文件和编译器一起提供的。这样的函数称为标准函数,如语言自带的标准库函数
动态链接库 DLL 及导入库: 程序运行时动态结合,不存在库文件的静态代码(只存在 DLL 文件目标路径信息),运行时才导入库文件的相关功能,因此也成导入库
静态链接库: 存储着目标文件的实体,并直接与可执行程序结合的库文件形式
可执行程序运行的必要条件: 需要程序内函数与变量的内存地址
虚拟内存地址: 在可执行程序加载到内存执行时,由于每次程序运行时,系统分配给程序内部的变量与函数的内存地址都不相同,因此为了避免这个问题,系统给程序内的变量与函数分配的为虚拟内存地址,
再配置信息: 在程序运行时,虚拟内存地址会转换成实际的内存地址进行运行,链接器会在可执行程序文件的开头,追加转换内存地址所需要的必要信息,称为再配置信息,该再配置信息为变量和函数的相对地址(相对基址的偏移量),通过基址和相对地址就可知道当前的实际内存地址
当程序加载到内存后,会分配生成堆、栈内存空间来进行运行时的数据保存
堆: 用来存储程序运行时的任意数据及对象的内存领域(全局变量)
栈: 用来存储函数内部临时使用的变量(局部变量),已经函数调用时所用的参数内存领域
内存中的程序构成: 由用于变量的内存空间、用于函数的内存空间(这两部分用于复制可执行程序到内存)、用于栈的内存空间、用于堆的内存空间(程序运行时申请分配用于存储运行时数据)四部分构成
程序运行时所需的内存分配: 程序运行时所需的内存空间分为 固定部分,和可变部分。

标签:读后感,函数,程序运行,文件,程序,内存空间,第八章,编译,可执行程序
From: https://www.cnblogs.com/ybbk/p/18035750

相关文章

  • 《程序是怎样跑起来的》第九章读后感
    操作系统构成:控制程序:硬件控制、程序运行控制编程语言处理器:汇编、编译、解析实用程序:文本编辑器、调试工具、Dump程序等操作系统本身不是单独的程序,而是多个程序的集合体,这个运行环境下,应用不直接控制硬件,而是通过操作系统来间接控制。系统调用与高级编程语言的移植性:......
  • 《程序是怎样跑起来的》第五章读后感
    内存利用电流实现:高速高价,磁盘利用磁效实现:低速低价磁盘中存储的程序:必须加载到内存中才能运行,因为负责解释和运行程序内容的CPU需要通过内部程序计数器来指定内存地址,然后才能读出程序,其次,磁盘的速度慢即使可以直接读取,效率也比较低下。内存与磁盘相互促进磁盘缓存:加快磁盘......
  • 《程序是怎样跑起来的》第六章读后感
    压缩分类:压缩后的数据可以复原的称为可逆压缩,无法复原的称为不可逆压缩。文件是将数据存储在磁盘等存储媒介上的一种形式,其以字节为存储单位,文件就是数据集合的字节。任何情况下:文件的字节序列都是连续存储的。RLE压缩算法:将文件内容用数据X重复次数,从而实现数据压缩,常用......
  • 第八章 异常控制流
    1.异常从给处理器加电开始,直到你断电为止程序计数器假设一个值的序列(\(a_k\)是\(I_k\)的地址)每次从\(a_k到a_{k+1}\)的过渡称为控制转移,这样的控制转移称为处理器的控制流系统必须对系统状态的变化(\(I_k和I_{k+1}\)的地址不相邻)做出反应,这些变化不是一些必要的机制(比如......
  • 《程序是怎样跑起来的》第八章——从源文件到可执行文件
    编译(Compilation):首先,程序员使用文本编辑器编写源代码,然后通过编译器将源代码转换为目标代码。编译器会进行词法分析、语法分析、优化和代码生成等步骤,最终生成可执行文件或库文件。链接(Linking):如果程序包含多个源文件或库文件,链接器会将这些文件中的目标代码连接在一起,形成最......
  • 程序是怎样跑起来的第十二章读后感
    读完《程序是怎样跑起来的》第十二章后,我对程序的性能优化有了更深刻的理解。这一章主要介绍了程序性能优化的方法和技巧,让我认识到了性能优化对于提升程序效率和用户体验的重要性。在这一章中,我学到了性能优化的多个方面,包括算法和数据结构的优化、代码优化、多线程和并发处理等......
  • 第十章 通过汇编语言了解程序的实际构成 笔记
    编语言是介于机器语言和高级编程语言之间的一种语言。它使用助记符来表示CPU指令,这些助记符相较于机器语言的二进制编码更为人类可读。虽然汇编语言比高级语言更难以编写和理解,但它能够提供对程序行为的直接控制,以及与计算机硬件架构密切相关的通过学习汇编语言,我们可以了解程序......
  • 编汇语言了解程序的实际构成
    一、汇编语言和本地代码1、汇编语言和本地代码的关系:汇编语言和本地代码是一一对应的关系。计算机CPU能直接解释运行只有本地代码(机器语言)程序。用C语言等编写的源代码,需要通过各自的编译器编译后,转换成本地代码。通过调查本地代码的内容,可以了解程序最终是以何种形式来运行的......
  • 《程序是怎样跑起来的》第九章
    操作系统类似于工厂的指挥官,与它指挥下的无数应用程序工人之间的互动,构成了现代计算技术的核心。操作系统作为硬件和软件之间的桥梁,其重要性不言而喻。它管理着计算机的资源,为应用程序提供一个运行的平台。这就好比一个高效的物流系统,确保每个应用程序都能得到所需的资源,同时保持......
  • 程序是怎样跑起来的第十一章读后感
    在阅读《程序是怎样跑起来的》第十一章后,我对程序的运行机制有了更深入的理解。这一章主要介绍了内存管理和垃圾回收的相关内容,让我认识到了高效的内存管理对于程序性能和稳定性的重要性。通过本章的学习,我了解到了内存管理的基本概念,包括内存分配、内存访问和内存释放。内存分配......