编译链接的最小单元

作者: 罗蓁蓁 | 来源:发表于2020-05-01 12:32 被阅读0次

本文讲讲编译链接的一些小常识!

编译最小单元

我们在开发过程中,需要把程序员写的源码,编译成机器可识别的机器码。这会经历编辑源代码->预处理->编译->链接的开发过程。

我们需要知道编译的最小单元是什么?很简单,一个源码会生成一个目标文件。因此,一个源文件就是一个编译最小单元。但是,这个源文件必须是:经过预处理过后的源文件,这很重要。

链接最小单元

编译完成以后,需要进行链接。

那么我们链接的最小单元是什么呢?答案是:通常情况下是一个目标文件。因此,只要我们用到了目标文件中的一个接口函数,那么该目标文件的所有内容最后都会放到可执行程序中去。这可能会让程序相对较大。

因此,我们可以在编译时加上参数:-ffunction-sections -fdata-sections,以及O2二级优化,然后全部重新编译一遍。用于链接的最小单元是接口,而不是文件。然后在链接生成out文件的那里,加上链接参数--gc-sections。目的是让生成的可执行文件尽可能小点。

但这样做,则必须得非常小心,且对源码非常熟悉,不然很可能会出现想使用的接口是未定义引用的情况。

出差必备

买火车票、高铁票、机票,订酒店都打9折的出行工具TRIP,点击注册

相关文章

  • 编译链接的最小单元

    本文讲讲编译链接的一些小常识! 编译最小单元 我们在开发过程中,需要把程序员写的源码,编译成机器可识别的机器码。这...

  • iOS:Module

    前言: 一个Module是机器代码和数据的最小单元,可以独立于其他代码单元进行链接,通常,Module是通过编译单...

  • iOS:Module

    1. Module-最小的代码单元 一个Module是机器代码和数据的最小单元,可以独立于其他代码单元进行链接,通...

  • iOS开发进阶八:Module(模块)

    module(模块):最小的代码单元 一个module是机器代码和数据的最小单位,可以独立于其他代码单位进行链接。...

  • iOS高级强化--011:module & Swift库

    module(模块):最小的代码单元一个module是机器代码和数据的最小单位,可以独立于其他代码单位进行链接通常...

  • Kubernetes Pod 工作流

    原文链接:Kubernetes Pod 工作流 我们知道Pod是Kubernetes中最小的调度单元,平时我们操作...

  • vc编译exe的体积最小优化

    参考链接:vc编译exe的体积最小优化 人们都说 vc 做出的东西可以小点,现在你打开vc编译一个Hello Wo...

  • 最小单元

    1、拆解你公司业务的“最小完整单元” 我的上一家公司主要是职场线上教育,主要的产品是商学院三个阶段的课程,商学...

  • Java单元测试JUnit(一)

    什么是单元测试 单元测试是针对最小的功能单元编写的测试代码 Java程序最小的功能单元是方法 单元测试就是针对单个...

  • Spring + jacoco + powerMock 单元测试

    一 什么是单元测试 什么是单元测试呢?单元测试就是针对最小的功能单元编写测试代码。Java程序最小的功能单元是方法...

网友评论

    本文标题:编译链接的最小单元

    本文链接:https://www.haomeiwen.com/subject/awafghtx.html