gcc- -O 优化选项

2023-11-13

查查gcc手册就知道了,每个编译选项都控制着不同的优化选项 下面从网络上copy过来的,真要用到这些还是推荐查阅手册
-O设置一共有五种:-O0、-O1、-O2、-O3和-Os。

除了-O0以外,每一个-O设置都会多启用几个选项,请查阅gcc手册的优化选项章节,以便了解每个-O等级启用了哪些选项及它们有何作用。

让我们来逐一考察各个优化等级:

-O0:这个等级(字母“O”后面跟个零)关闭所有优化选项,也是CFLAGS或CXXFLAGS中没有设置-O等级时的默认等级。这样就不会优化代码,这通常不是我们想要的。
-O1:这是最基本的优化等级。编译器会在不花费太多编译时间的同时试图生成更快更小的代码。这些优化是非常基础的,但一般这些任务肯定能顺利完成。
-O2:-O1的进阶。这是推荐的优化等级,除非你有特殊的需求。-O2会比-O1启用多一些标记。设置了-O2后,编译器会试图提高代码性能而不会增大体积和大量占用的编译时间。
-O3:这是最高最危险的优化等级。用这个选项会延长编译代码的时间,并且在使用gcc4.x的系统里不应全局启用。自从3.x版本以来gcc的行为已经有了极大地改变。在3.x,-O3生成的代码也只是比-O2快一点点而已,而gcc4.x中还未必更快。用-O3来编译所有的软件包将产生更大体积更耗内存的二进制文件,大大增加编译失败的机会或不可预知的程序行为(包括错误)。这样做将得不偿失,记住过犹不及。在gcc 4.x.中使用-O3是不推荐的。
-Os:这个等级用来优化代码尺寸。其中启用了-O2中不会增加磁盘空间占用的代码生成选项。这对于磁盘空间极其紧张或者CPU缓存较小的机器非常有用。但也可能产生些许问题,因此软件树中的大部分ebuild都过滤掉这个等级的优化。使用-Os是不推荐的。


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

gcc- -O 优化选项 的相关文章

  • 如何获取子进程的返回值?

    程序计算从 1 到 N 的数字之和 子进程计算偶数之和 父进程计算奇数之和 我想在父进程中获取子进程的返回值 我怎么做 include
  • Eclipse CDT 内置包含目录

    Under Eclipse CDT gt Project Settings gt C C General gt Paths and Symbols gt Includes gt GNU C 有一个包含路径的列表 有些是粗体的并且是特定于项目
  • __get_cpuid 的可移植性如何?

    我在用着 get cpuid 获取有关的信息x86 and x86 64我的程序运行的处理器 在 Linux 和 Mac OS 上使用 GCC 似乎可以在不包含任何头文件的情况下编译和运行 但是它的可移植性如何 它可以与其他编译器一起使用吗
  • 在 Linux 上的 makefile 和 Makefile 之间进行选择

    我想在一个目录中同时使用 Makefile 和 makefile 进行 make 默认情况下 它将执行makefile 我可以选择执行 Makefile 吗 提前致谢 最简单的选择是使用 f make f Makefile From man
  • 使用 gcc 在 C 中实现类型安全的可变参数

    很多时候 我希望函数接收可变数量的参数 例如以 NULL 结尾 define push stack t stack push VARARG NULL func push stack t stack char s va list args v
  • 如何让 gcc/clang 警告 switch 语句中缺少中断

    有什么办法可以使gcc or clang警告 switch 语句中缺少中断 具体来说 我几乎总是希望 case 语句以中断结束 如果我不这样做的话 如果我能让编译器抱怨 那就太好了 如果它会寻找一个break语句或一个 fall throu
  • 减少内存分配GCC命令

    今天 在我的计算机科学课上 我被告知我可以调整程序在编译期间可以分配的内存量 使用 GCC Linux 该数量默认设置为最佳模式 这意味着尽可能多 在调试应用程序期间 我可以从这个编译器功能中受益匪浅 因为我需要正确处理分配错误 这在我的
  • gamma(double x) 的定义是什么以及为什么它在两个 gcc 版本上不同?

    通过不幸的情况 我发现我的标准库实现
  • _mm256_fmadd_ps 比 _mm256_mul_ps + _mm256_add_ps 慢?

    我有一个图像处理算法来计算a b c d与AVX 伪代码如下 float a new float N float b new float N float c new float N float d new float N assign va
  • 内联 asm 中不支持的指令“mov”将控制寄存器移动到 uint32_t

    我在 C 函数中使用汇编代码 但海湾合作委员会给出unsupported instruction mov 以下代码的错误 uint32 t faulting address asm volatile mov cr2 0 r faulting
  • GCC 4.7 字符串文字的源字符编码和执行字符编码?

    Linux x86 64 上的 GCC 4 7 是否具有默认字符编码 用于验证和解码 C 源文件中字符串文字的内容 这是可配置的吗 此外 当将字符串数据从字符串文字链接到输出的数据部分时 它是否具有默认的执行字符编码 这是可配置的吗 在任何
  • __libc_start_main 发生了什么?

    我真的很想理解从高级代码到可执行文件的步骤 但是遇到了一些困难 我写了一个空的int main C 文件并尝试通过以下方式破译反汇编objdump d 这是发生的事情 in start 设置对齐方式 将参数压入堆栈 调用 libc star
  • 为什么 GCC 不将 a*a*a*a*a*a 优化为 (a*a*a)*(a*a*a)?

    我正在对科学应用程序进行一些数值优化 我注意到的一件事是 GCC 会优化调用pow a 2 通过将其编译成a a 但是调用pow a 6 没有优化 实际会调用库函数pow 这大大降低了性能 相比之下 英特尔 C 编译器 http en wi
  • C 中类似函数的宏定义

    我想定义一个像 MACRO 这样的函数 IE define foo x if x gt 32 x else 2 x endif 那是 if x gt 32 then foo x present x else foo x present 2
  • C++ while 循环优化无法正常工作

    我有这个代码段 include
  • c - 将 .data 发送到不同的部分

    我想把其中的符号 data为特定 C 文件生成的节并将它们放在不同的节中 例如 mydata 在最终的可执行文件中 例如 normaldata c char my str this should appear in data special
  • 在64位操作系统上以32位模式和64位模式编译ioctl函数的执行有什么不同?

    我有 64 位 Enterprise SuSE 11 我有一个应用程序 它打开 HIDRAW 设备并在其上操作 ioctl 函数以从该设备获取原始信息 如下所示 struct hidraw devinfo devinfo int fd op
  • 为什么 -march=native 很少使用?

    对于大多数 C C 编译器 有一个可传递给编译器的标志 march native 它告诉编译器调整为主机 CPU 的微架构和 ISA 扩展生成的代码 即使它的名称不同 基于 LLVM 的编译器通常也有一个等效的选项 例如rustc or s
  • 分析 ELF 部分和符号大小的工具

    我需要一种方法来分析 ARM 的 GCC 编译器的输出文件 我正在为裸机进行编译 并且我非常关心大小 我可以用arm none eabi objdump由交叉编译器提供 但如果存在用于此任务的工具 则解析输出并不是我渴望做的事情 您知道存在
  • 如何在编译C代码时禁用警告?

    我正在使用 32 位 Fedora 14 系统 我正在使用编译我的源代码gcc 有谁知道如何在编译c代码时禁用警告 EDIT 是的 我知道 最好的办法是修复这些警告以避免任何未定义 未知的行为 但目前在这里 我第一次编写了巨大的代码 并且在

随机推荐

  • vscode连接服务器

    使用VScode连接服务器的好处在于 vscode可以当成一个网页端的IDE 而使用Pycharm连接服务器则存在文件的同步问题 而且很慢 此处保险起见 加一个前提条件 to the best of our knowledge 步骤一 安装
  • Vue3的fragment

    vue2时 组件的模板结构中出现多个标签时 需要使用根标签 vue3时 组件的模板结构中出现多个标签时 可以不用根标签 这是因为vue3会自动将多个标签用fragment包裹 举个例子 main js import createApp fr
  • 华为h22h05服务器装系统_在新服务器装12年前的系统,如何实现

    2020年1月14日 微软正式终止支持Windows 7 包括不再提供任何技术支持 软件更新和安全更新及修复 这意味着 如果用户不想让自己的电脑 裸奔 就得升级到更新的操作系统版本 也许有些人觉得更新操作系统并没有什么 但对那些古董软件使用
  • 社会学讲义

    文章目录 一 社会学的观点和视角 1 世界为什么不是看起来的那个样子 为什么我们需要通过社会学的视角来看世界 2 社会学的想象力 赖特 米尔斯 C Wright Mills 3 为何要培养 社会学的想象力 4 为什么说人的世界观和人的属性是
  • 关于蓝牙测试蓝牙协议(应用层)

    1 HFP 让蓝牙设备可以控制电话 如接听 挂断 拒接 语音拨号等 拒接 语音拨号要看蓝牙设备和手机是否支持 2 HSP 描述了蓝牙耳机如何与计算机或者其他蓝牙设备 手机 通信 连接配置好后耳机可以作为远程设备的音频输入和输出接口 这个是最
  • torch.bmm()函数详解

    去掉batch size这一维度 按照矩阵乘法运算即可 自行体会 class PAM Module nn Module Position attention module def init self in dim gt None super
  • vue-cli4.0下antd(ant-design-vue)按需引入(附带完整过程)

    ant design vue 踩坑记录 官网没给vue cli4的例子 于是试试按照官网vue cli3的步骤操作 遇到了一些问题 这里记录下 后文给了完整过程 我亲自重新跑过一遍 应该是没有问题的 坑1 Failed to resolve
  • [vue报错]has been blocked by CORS policy

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 8080 setMealDetail goodsId 36363684365 1 Access to XMLHttpRequest at http 132 121 80 2
  • react hook

    一 hook的定义 Hook 是 React 16 8 的新增特性 它可以让你在不编写 class 的情况下使用 state 以及其他的 React 特性 二 使用react hook的好处 1 使用类组件 相关逻辑的代码会被分割到不同生命
  • Java-多线程-给线程命名

    Java 多线程 给线程命名 在Java中 通过继承Thread创建的线程 有以下两种方式可以给线程命名 通过构造器命名 因为线程类继承自Thread类 所有也继承了Thread的name属性 可以通过super的方法调用父类构造器 将na
  • 关于xxxxxxRepository.search()方法一个分页的小陷阱

    背景介绍 我有20几万的数据 现在要推送给别人 这样我势必要从自己的数据库中先查出来 然后一点一点的传给对方 所以我的思路是这样的 20万数据 Repository自带的search方法有分页功能 我只需要传一个pageable给它 告诉它
  • Linux 多线程 ( 多线程概念 )

    文章目录 Linux线程概念 什么是线程 二级页表 线程的优点 线程的缺点 线程异常 Linux线程概念 什么是线程 在一个程序里的一个执行路线叫做线程 thread 更准确的定义为 线程是一个进程内部的控制序列 一切进程至少有一个执行线程
  • TwinCAT3中松下伺服A6BF的全闭环设置步骤

    以TwinCAT3和A6BF进行全闭环测试 带有编码器和绝对式光栅尺 实测有效 扫描硬件 首先安装EtherCAT网口驱动 点击安装网卡驱动 TWINCAT Show Realtime Ethercat Compatibel Devices
  • CAN 为什么需要收发器

    在RTL代码中集成了两个CAN node 打算直接连接将两个node的Rx和Tx对接 发现两个CAN Node无法通信 询问技术支持后才知道必须要收发器 那为什么一定需要收发器呢 除了转换单端的CAN信号用于不同的传输 收发器也会将CANT
  • Unity-ML-Agents安装

    目录 1 下载ML Agents 1 1 前往官网 1 2 选择版本 1 3 下载文件 2 下载Anaconda 3 虚拟环境 3 1 构建虚拟环境 3 2 创建项目 导入package json 3 2 1 创建项目 导入package
  • Linux查询文件行数

    wc l find name c
  • OpenCV之warpPerspective--透视变换

    OpenCV之warpPerspective 透视变换 参考博客链接 https blog csdn net liuphahaha article details 50719275 为了记录自己的学习 一 OpenCV透视变化进行图像中的关
  • 《神经网络与深度学习》-概率图模型

    概率图模型 1 模型的表示 1 1 有向图模型 1 2 常见的有向图模型 1 2 1 Sigmoid信念网络 1 2 2 朴素贝叶斯分类器 1 2 3 隐马尔科夫模型 1 3 无向图模型 1 4 无向图模型的概率分解 1 5 常见的无向图模
  • 【面试总结】设计思想解读开源框架:(1)

    12 策略模式 Strategy Pattern 13 适配器模式 Adapter Pattern 14 迭代器模式 Iterator Pattern 15 组合模式 Composite Pattern 16 观察者模式 Observer
  • gcc- -O 优化选项

    查查gcc手册就知道了 每个编译选项都控制着不同的优化选项 下面从网络上copy过来的 真要用到这些还是推荐查阅手册 O设置一共有五种 O0 O1 O2 O3和 Os 除了 O0以外 每一个 O设置都会多启用几个选项 请查阅gcc手册的优化