gcc编译优化

优化选项

-flto

  1. Whole Program Mode(整个程序模式):在这种模式下,编译器对整个程序进行优化。它通过将所有源文件合并成一个单独的中间表示(IR)文件,然后进行全局的优化和代码生成。这种模式可以提供更大的优化空间,因为编译器可以看到整个程序的上下文信息,从而进行更准确的优化。但是,它需要更多的时间和资源来处理整个程序,因此编译时间会增加。

  2. LTRANS(Link-Time Transformer)模式:在这种模式下,编译器对每个源文件进行优化,并将优化后的中间表示(IR)文件保存到目标文件中。最后,链接器将这些目标文件组合在一起,并进行进一步的优化。这种模式对于大型项目来说更具可行性,因为它可以将优化过程分布在多个编译和链接阶段,从而减少了单个编译过程的资源消耗。然而,由于无法全局优化整个程序,它可能无法实现某些全局优化的效果。

-flto=thin

thinLTO是GCC引入的一种折衷方案,它结合了整个程序模式和LTRANS模式的优点. 在链接阶段,链接器可以使用这些索引文件来进行全局的优化和代码生成。它会根据需要只选择需要的函数和变量,而不必处理整个程序。这样既减少了编译时间和资源消耗,又能够实现一定程度的全局优化。ThinLTO模式在大型项目中特别有用,因为它能够提供较好的优化效果,同时还保持了相对较低的编译时间和资源消耗。

LTRANS(Link-Time Transformer)和ThinLTO(Thin Link-Time Optimization)是两种不同的链接时优化(Link-Time Optimization,简称LTO)方式,它们在实现和效果上有一些区别。

  1. 实现方式:

    • LTRANS:LTRANS模式将每个源文件编译为优化后的目标文件,并将这些目标文件保存在最终的可执行文件中。在链接阶段,目标文件之间会进行进一步的优化和代码生成。
    • ThinLTO:ThinLTO模式将每个源文件编译为精简的中间表示(IR)文件,并生成一个索引文件。在链接阶段,链接器根据需要选择并优化相关的函数和变量,而不必处理整个程序。
  2. 优化范围:

    • LTRANS:LTRANS模式对整个程序进行全局优化。由于可以看到整个程序的上下文信息,因此可以进行更准确和全面的优化。但是,这可能导致编译时间和资源消耗增加。
    • ThinLTO:ThinLTO模式只对需要的函数和变量进行优化。通过使用索引文件,在链接阶段选择和优化相关的部分,以减少编译时间和资源消耗。但由于无法全局优化整个程序,某些全局优化的效果可能不如LTRANS模式。
  3. 适用范围:

    • LTRANS:LTRANS模式适用于大型项目,可以提供更高的优化水平。它可以处理整个程序,但可能需要更长的编译时间和更多的资源。
    • ThinLTO:ThinLTO模式在大型项目中也很有用,因为它可以在一定程度上实现全局优化,并减少编译时间和资源消耗。由于它只处理相关的部分,因此在某些情况下,优化效果可能稍逊于LTRANS模式。

总体而言,LTRANS和ThinLTO都是有效的链接时优化方式,但根据项目的规模、编译时间和优化需求来选择适合的模式。LTRANS模式提供了更高的优化水平,而ThinLTO模式则在资源消耗方面更为友好。

-march选项用于指定目标处理器的架构

 -march选项后面可以跟随特定的处理器架构名称,比如-march=core2-march=armv8-a等。这样编译器就会根据目标处理器的架构来选择合适的指令集,并对代码进行相应的优化,以充分利用处理器的功能和特性。

需要注意的是,使用-march选项进行优化时,需要确保目标处理器与编译后的可执行文件运行的环境是匹配的。如果在较新的处理器上进行编译优化,可能会导致生成的可执行文件在较老的处理器上无法正常运行。因此,在选择-march选项时,需要考虑目标处理器的实际环境和要求。

优化等级

00:无优化。编译器只进行语法检查和生成目标代码,不进行任何优化操作。这种等级通常用于调试和代码分析。

O1优化会消耗少多的编译时间,它主要对代码的分支,常量以及表达式等进行优化。如去除未使用的函数、内联简单函数等,以提高执行速度。 

O2会尝试更多的寄存器级的优化以及指令级的优化,它会在编译期间占用更多的内存和编译时间。 如循环展开、函数调用优化等。这种等级适用于对性能有较高要求的场景。

O3在O2的基础上进行更多的优化,例如使用伪寄存器网络,普通函数的内联,以及针对循环的更多优化。 更激进的内联、更复杂的循环优化等。这种等级适用于对性能要求非常高且可以接受编译时间延长的情况。

Os主要是对代码大小的优化,我们基本不用做更多的关心。 通常各种优化都会打乱程序的结构,让调试工作变得无从着手。并且会打乱执行顺序,依赖内存操作顺序的程序需要做相关处理才能确保程序的正确性。  

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/167140.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

手把手用GPT开发小程序全流程!就是这么easy~

大家好,我是五竹。 前段时间用GPT开发了一款小程序:GPT真牛批!三天开发一个小程序,三天积累了2000的用户,上周末抽空又接入了流量主,感兴趣的同学可以围观一下。 今天就来带大家走一遍用GPT开发一款小程序的全过程&a…

为什么选择美国VPS服务器

企业、个人和组织都需要一个稳定高效的服务器来托管他们的网站、应用程序和数据。而对于中国用户来说,寻找一个性价比高的便宜美国VPS服务器,既能满足需求,又能节约成本,成为了一个非常重要的问题。 VPS即虚拟专用服务器&#xf…

Sulfo-Cy3-COOH荧光染料的合成和反应机制

Sulfo-Cy3-COOH**(源自星戈瑞的花菁染料)**荧光染料的合成通常涉及多个步骤,其中包括官能团的引入、染料核心的合成以及亲水性修饰等。 官能团引入: 合成Sulfo-Cy3-COOH的第一步通常是引入羧酸(COOH)官能团。这可以通过对已有的C…

C++算法 —— 贪心(3)

文章目录 1、买卖股票的最佳时机2、买卖股票的最佳时机Ⅱ3、K次取反后最大化的数组和4、按身高排序5、优势洗牌6、最长回文串7、增减字符串匹配 1、买卖股票的最佳时机 121. 买卖股票的最佳时机 这里最容易想到的就是暴力枚举,两层for循环,i 0&#xf…

RTMP直播应用与延时分析

直播应用中,RTMP和HLS基本上可以覆盖所有客户端观看, HLS主要是延时比较大,RTMP主要优势在于延时低。 一、应用场景 低延时应用场景包括: . 互动式直播:譬如2013年大行其道的美女主播,游戏直播等等各种…

TFA-Net

TFA SCA means ‘Self-Context Aggregation’ 作者未提供代码

一文讲明Mybatis 的使用 超详细 【爆肝两万字教程】

我 | 在这里 🕵️ 读书 | 长沙 ⭐软件工程 ⭐ 本科 🏠 工作 | 广州 ⭐ Java 全栈开发(软件工程师) 🎃 爱好 | 研究技术、旅游、阅读、运动、喜欢流行歌曲 🏷️ 标签 | 男 自律狂人 目标明确 责任心强 ✈️公…

数据字典回显功能设计与实现

数据字典回显功能设计与实现 文章目录 数据字典回显功能设计与实现1. 业务场景2. 实现设计2.1 注解AOP切面2.2 注解mybatis拦截器2.3 注解序列化2.4 涉及字段直接申明成字典引用类型mybatis拦截器反序列化处理 3. 具体实现 1. 业务场景 我们日常开发中经常会遇到:数…

羊大师教你,什么搭配羊奶能够带来全方位的营养?

羊奶作为一种营养价值极高的乳制品,其丰富的营养成分对人体健康有着诸多益处。然而,不同的食物搭配会对羊奶的营养吸收产生不同的影响。为了让大家更好地利用羊奶的营养价值,下面小编羊大师将为大家介绍一些与羊奶搭配的食物,帮助…

Qt实现画的图片移动

要实现左键点击鼠标时图片跟着鼠标移动,可以通过以下步骤来实现:1. 在QGraphicsView的构造函数中设置鼠标跟踪属性,以便能够捕获鼠标事件。cpp QGraphicsView::QGraphicsView(QWidget *parent) : QGraphicsView(parent) {setMouseTracking(tr…

Leetcode617合并二叉树

理解题意:相同节点位置上,都有数据的话,节点值相加,只有一方有数据的话,把有数据的部分及相关子树保留下来。 考察操作两棵二叉树,二叉树的遍历。 一般有两种解决方式: 递归|迭代。 区别&#x…

element 中文地址

Element - The worlds most popular Vue UI framework 2 Menu 菜单 | Element Plus 3 侦听器 | Vue.js vue中文官网

软件测试职业规划导图

公司开发的产品专业性较强,软件测试人员需要有很强的专业知识,现在软件测试人员发展出现了一种测试管理者不愿意看到的景象: 1、开发技术较强的软件测试人员转向了软件开发(非测试工具开发); 2、业务能力较强的测试人员转向了软件…

ubuntu创建新用户, 并赋予root权限

在Ubuntu上创建新用户可以通过adduser命令来完成。以下是创建新用户的基本步骤: 打开终端:你可以按下Ctrl Alt T来打开终端。 使用sudo命令以管理员权限执行adduser命令。例如,如果你要创建一个名为newuser的新用户,运行以下命…

【EI会议征稿】第三届电子信息技术国际学术会议(EIT 2024)

The 3rd International Conference on Electronic Information Technology 第三届电子信息技术国际学术会议(EIT 2024) 电子信息工程在我国信息化产业的发展过程中举足轻重,且随着现代社会的发展,航空航天领域、制造业领域和智能…

LSTM+CNN实现时间序列预测(负荷预测)

文章目录 LSTM+CNN实现时间序列预测(PyTorch版)基于PyTorch搭建LSTM+CNN模型实现风速时间序列预测配置类时序数据集的制作数据归一化数据集加载器搭建LSTM+CNN模型定义模型、损失函数、优化器模型训练可视化结果十、完整源码LSTM+CNN实现时间序列预测(Keras版)源码模型训练绘制…

每日一题:LeetCode-102.二叉树的层序遍历

每日一题系列(day 03) 前言: 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 &#x1f50e…

NX二次开发UF_CSYS_set_wcs 函数介绍

文章作者:里海 来源网站:https://blog.csdn.net/WangPaiFeiXingYuan UF_CSYS_set_wcs Defined in: uf_csys.h int UF_CSYS_set_wcs(tag_t csys_id ) overview 概述 Sets the work coordinate system to the prototype coordinate system whose tag y…

为什么技术干不过产品?

近年来,我们经常会听到一些关于技术和产品之间关系的讨论,包括最近的ChatGPT之父奥特曼被董事会开除事件。在这个问题上,有人认为技术应该优于产品,因为技术是实现产品的基础。然而,也有人认为产品比技术更重要&#x…