【ARM 嵌入式 编译系列 2.7 -- GCC 编译优化参数详细介绍】


请阅读【嵌入式开发学习必备专栏 】


文章目录

    • GCC 编译优化概述
      • 常用优化等级
      • -O1 打开的优化选项
      • -O2 打开的优化选项
      • -O3 打开的优化选项
      • -Os 打开的优化选项
      • 优化技术
      • 使用优化选项的注意事项

在这里插入图片描述

GCC 编译优化概述

GCC(GNU Compiler Collection)包含了用于C、C++、Objective-C、Fortran、Ada和Go等语言的编译器。在编译过程中,GCC提供了多种优化选项,用于提高生成代码的性能,减少可执行文件的大小,或者在这两者之间寻求平衡。优化的方法不一而足,总体上将有以下几类:

  • 精简操作指令;
  • 尽量满足cpu的流水操作;
  • 通过对程序行为地猜测,重新调整代码的执行顺序;
  • 充分使用寄存器;
  • 对简单的调用进行展开等等。

GCC 提供了从O0-O3以及Os这几种不同的优化级别供大家选择,在这些选项中,包含了大部分有效的编译优化选项,并且可以在这个基础上,对某些选项进行屏蔽或添加,从而大大降低了使用的难度。以下是GCC编译优化的详细介绍:

常用优化等级

  • -O0: 不做任何优化,这是默认的编译选项。

    • 不进行优化。
    • 编译速度最快。
    • 通常用于调试,因为它保留了所有的调试信息并且每一行代码都可以直接对应到生成的机器代码。
  • -O1

    • 启用基本优化。
    • 尝试减少代码大小和执行时间,不会显著增加编译时间。
    • 可用于提高程序性能同时保持较好的编译速度。
  • -O2

    • 进行进一步优化。
    • 包含几乎所有不涉及空间-时间权衡的优化。
    • 通常为发布版本推荐的优化级别。
  • -O3

    • 启用更多的优化,包括-O2中的优化以及其他提高性能的优化。
    • 可能会使得编译出来的程序体积变大。
    • 适用于对性能要求极高的程序。
  • -Os

    • 优化生成的代码大小。
    • 执行适合在代码大小和执行时间之间进行权衡的所有优化。
  • -Ofast

    • 最大程度优化

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

机器学习之DeepSequence软件使用学习1

简介 DeepSequence 是一个生成性的、无监督的生物序列潜变量模型。给定一个多重序列比对作为输入,它可以用来预测可获得的突变,提取监督式学习的定量特征,并生成满足明显约束的新序列文库。它将序列中的高阶依赖性建模为残差子集之间约束的非…

FLUENT Meshing Watertight Geometry工作流入门 - 6 描述几何体

本视频中学到的内容: 讨论“描述几何”任务中所需各种输入的工作细节如何为流体区域创建盖面使用“创建区域”任务创建流体区域 视频链接: FLUENT Meshing入门教程-6描述几何体_哔哩哔哩_bilibili 【Import Mesh】 启动 Ansys Fluent 进入网格模式。转…

从头开始构建和训练 Transformer(下)

导 读 上一篇推文从头开始构建和训练 Transformer(上)https://blog.csdn.net/weixin_46287760/article/details/136048418介绍了构建和训练Transformer的过程和构建每个组件的代码示例。本文将使用数据对该架构进行代码演示,验证其模型性能。…

[office] Excel如何快速统一数字编号长度 #经验分享#其他

Excel如何快速统一数字编号长度 我们在办公室使用Excel统计数据的时候,经常会遇到第一列数据全部是数字编号,但是因为数字的位数不一样,长短不一的样子看起来不是很协调。那么如何快速统一数字编号长度呢?一起来了解一下吧 我们在…

STM32内部Flash

目录 一、内部Flash简介 二、内部Flash构成 1. 主存储器 2. 系统存储区 3. 选项字节 三、内部Flash写入过程 1. 解锁 2. 页擦除 3. 写入数据 四、工程空间分布 某工程的ROM存储器分布映像: 1. 程序ROM的加载与执行空间 2. ROM空间分布表 一、内部Flash…

【Java数据结构】单向 不带头 非循环 链表实现

模拟实现LinkedList:下一篇文章 LinkedList底层是双向、不带头结点、非循环的链表 /*** LinkedList的模拟实现*单向 不带头 非循环链表实现*/ class SingleLinkedList {class ListNode {public int val;public ListNode next;public ListNode(int val) {this.val …

Go语言每日一练——链表篇(五)

传送门 牛客面试笔试必刷101题 ----------------合并k个已排序的链表 题目以及解析 题目 解题代码及解析 解析 这一道题与昨天的合并链表题目类似,但是由于有K个且时间复杂度要求控制在O(nlogn),这里主要有两种解法:一种是依旧使用归并来…

Python算法题集_相交链表

Python算法题集_相交链表 题41:相交链表1. 示例说明2. 题目解析- 题意分解- 优化思路- 测量工具 3. 代码展开1) 标准求解【双层循环】2) 改进版一【双指针】3) 改进版二【哈希检索-集合】4) 改进版三【哈希检索-字典】 4. 最优算法 本文为Python算法题集之一的代码示…

游戏服务器购买多少钱1个月?买一年贵吗?

游戏服务器购买多少钱1个月?阿里云26元1个月、腾讯云32元1个月。买一年贵吗?不贵。 游戏服务器租用多少钱一年?1个月游戏服务器费用多少?阿里云游戏服务器26元1个月、腾讯云游戏服务器32元,游戏服务器配置从4核16G、4…

OSI七层模型

文章目录 定义各层功能定义在 OSI 模型中如何进行通信OSI 模型有哪些替代方案:TCP/IP 定义 OSI是一种开放系统互连参考模型 (Open System Interconnect 简称OSI),是国际标准化组织(ISO)和国际电报电话咨询委员会(CCITT)联合制定的开放系统互…

[职场] 集成电路IC设计工程师求职简历工作经历范文(精选4篇) #职场发展#其他

集成电路IC设计工程师求职简历工作经历范文(精选4篇) 集成电路IC设计工程师在找工作做简历的时候,经常不知道求职简历中的工作经历板块怎么写,下面是简历网小编整理的适合集成电路IC设计工程师在做简历时写的工作经历范文4篇&…

40000000人民币有多重

在日常生活中,我们经常看到大量现金的重量作为一个有趣的话题。那么,40000000人民币到底有多重呢?本文将详细介绍如何计算这个问题,并讨论与现金重量相关的因素。 首先,我们需要了解人民币纸币的重量。一张崭新的100元…

MySQL篇----第十篇

系列文章目录 文章目录 系列文章目录前言一、MyISAM Static 和 MyISAM Dynamic 有什么区别?二、如果一个表有一列定义为 TIMESTAMP,将发生什么?三、你怎么看到为表格定义的所有索引?四、LIKE 声明中的%和_是什么意思?五、列对比运算符是什么?前言 前些天发现了一个巨牛…

【力扣】整数反转,判断是否溢出的数学解法

整数反转原题地址 方法一:数学 反转整数 如何反转一个整数呢?考虑整数操作的3个技巧: xmod10可以取出x的最低位,如x123,xmod103。x/10可以去掉x的最低位,如x123,x/10,x12。xx*10…

26 使用 Samba 实现文件共享

Samba 文件共享服务 Samba 服务程序现在已经成为在 Linux 系统与Windows 系统之间共享文件的最佳选择 详细配置请转Samba服务 安装 [rootlocalhost ~]# yum install samba -ySamba 服务程序的主配置文件,只有 37 行。 第 5~8 行参数中所提到的 cups…

仰暮计划|“用心感悟使我获取了艺术真谛,自律如始让我获得了人生成功,我将继续在艺术道路上走下去”

口述人:郭敬东(男) 整理人:马静 口述人与整理人关系:姥爷与外孙女 口述人基本信息:现60岁,1963年出生于湖北省大悟县刘集镇金鼓村,1987年移居到河南省焦作市,现居河南省焦作市高新区。 引言:在得知要讲述自己的经历…

企业数字化转型面临什么挑战?

数字化转型是一个复杂且持续的过程,涉及将数字技术集成到组织的各个方面,从根本上改变组织的运营方式和为客户提供价值的方式。虽然具体的挑战可能因企业的性质和规模而异,但一些常见的挑战包括: 1.抵制变革: 文化阻…

STM32单片机的基本原理与应用(七)

超声波测距实验 基本原理 超声波测距实验是STM32单片机通过控制HC-SR04超声波模块,使其发送超声波,遇到物体反射回超声波来实现距离测量,其原理就是在发射超声波到接收超声波会有一段时间,而超声波在空气中传播的速度为声速&…

python打包exe,并发布windows服务实践

操作实践 1、编写python程序,按照自己的需求编写 以下是案例 # -*- coding:utf-8 -*- import win32serviceutil import win32service import win32event import win32timezone #不加导入,打包后运行会报错,原因未知,暂时不…

小白Linux学习笔记-Linux内核

Linux内核 文章目录 Linux内核WHEREWHATmoudules.dep 文件depmod 命令depmod 实验lsmod 命令modinfo 命令内核模块的观察实验 内核模块的加载与移除:insmod, modprobe, rmmodinsmod 命令modprobe 命令rmmod 命令内核模块的加载与移除实验 内核模块的额外参数设定:/etc/modprobe…