GCC优化相关

文章目录

  • 优化选项
    • 博文链接
  • 单独设置某段代码优化等级
    • 博文链接

优化选项

在这里插入图片描述

  • -O/-O0:无优化(默认)
  • -O1:使用能减少目标文件大小以及执行时间并且不会使编译时间明显增加的优化。该模式在编译大型程序的时候会花费更多的时间和内存。在-O1 下,编译会尝试减少代码体积和代码运行时间,但是并不执行会花费大量时间的优化操作。
  • -O2: 包含-O1 的优化并增加了不需要在目标文件大小和执行速度上进行折衷的优化。GCC 执行几乎所有支持的操作但不包括空间和速度之间权衡的优化,编译器不执行循环展开以及函数内联。这是推荐的优化等级,除非你有特殊的需求。-O2 会比-O1 启用多一些标记。与-O1 比较该优化-O2 将会花费更多的编译时间当然也会生成性能更好的代码。
  • -Os:专门优化目标文件大小,执行所有的不增加目标文件大小的-O2 优化选项。同时-Os 还会执行更加优化程序空间的选项。这对于磁盘空间极其紧张或者 CPU 缓存较小的机器非常有用。但也可能产生些许问题,因此软件树中的大部分 ebuild 都过滤掉这个等级的优化。使用-Os 是不推荐的。
  • -O3: 打开所有 -O2 的优化选项并且增加 -finline-functions, -funswitch-loops,-fpredictive-commoning, -fgcse-after-reload and -ftree-vectorize 优化选项。这是最高最危险的优化等级。用这个选项会延长编译代码的时间,并且在使用 gcc4.x 的系统里不应全局启用。自从 3.x 版本以来 gcc 的行为已经有了极大地改变。在 3.x,-O3 生成的代码也只
    是比-O2 快一点点而已,而 gcc4.x 中还未必更快。用-O3 来编译所有的软件包将产生更大体积更耗内存的二进制文件,大大增加编译失败的机会或不可预知的程序行为(包括错误)。这样做将得不偿失,记住过犹不及。在 gcc 4.x.中使用-O3 是不推荐的。

博文链接

gcc各等级优化的性质
gcc手册-优化选项(英文原文)

单独设置某段代码优化等级

一个简单示例如下,

#pragma GCC push_options
#pragma GCC optimize ("O1")
void spi_write_only(u32 data)
{u32 uiTemp;Xil_Out32(IOMODULE_IO_BASEADDR + SPI_SEND_DATA_ADDR*4,data);Xil_Out32(IOMODULE_IO_BASEADDR + SPI_SEND_VLD_ADDR*4,0);Xil_Out32(IOMODULE_IO_BASEADDR + SPI_SEND_VLD_ADDR*4,1);Xil_Out32(IOMODULE_IO_BASEADDR + SPI_SEND_VLD_ADDR*4,0);while(1){uiTemp = Xil_In32(IOMODULE_IO_BASEADDR + SPI_RECV_ADDR*4);if(0x1 == (uiTemp>>31)) {break;}}
}
#pragma GCC pop_options

博文链接

C/C++编译器局部优化技术:局部优化是针对单个函数或基本块进行的优化
【C++】如何强制指定函数的优化等级
如何指定某个c代码段在使用gcc编译时的优化级别
GCC设置部分代码的编译选项

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

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

相关文章

内核初始化的过程

内核的启动从入口函数 start_kernel() 开始。在 init/main.c 文件中,start_kernel 相当于内核的 main 函数。打开这个函数,你会发现,里面是各种各样初始化函数 XXXX_init。 在操作系统里面,先要有个创始进程,有一行指令…

JAVA发送消息到RabbitMq

项目中&#xff0c;作为生产者自定义消息发送到RabbitMq。 1.引入rmq依赖 <!-- rabbitmq 依赖 --><dependency><groupId>com.rabbitmq</groupId><artifactId>amqp-client</artifactId><version>5.9.0</version></dependen…

SystemVerilog Assertions应用指南 Chapter1.31 在属性中使用形参

可以用定义形参( formal arguments)的方式来重用一些常用的属性。属性“arb”使用了4个形参,并且根据这些形参进行检验。其中还定义了特定的时钟。SVA允许使用属性的形参来定义时钟。这样,属性可以应用在使用不同时钟的相似设计模块中。同样的,时序延迟也可以参数化,这使得属性…

cocos creator 在网页中调试的时候直接代码调试方法

cocos creator 在网页中调试的时候直接代码调试方法

Milvus 介绍

Milvus 介绍 Milvus 矢量数据库是什么&#xff1f;关键概念非结构化数据嵌入向量向量相似度搜索 为什么是 Milvus?支持哪些索引和指标&#xff1f;索引类型相似度指标(Similarity metrics) 应用示例Milvus 是如何设计的&#xff1f;开发者工具API访问Milvus 生态系统工具 本页…

算法专题:双指针

目录 题目1&#xff1a;移动零 题目2&#xff1a;复写零 题目3&#xff1a;快乐数 题目4&#xff1a;最多水的容器 题目5&#xff1a;有效三角形的个数 题目6&#xff1a;两数之和为s 题目1&#xff1a;移动零 给定一个数组nums&#xff0c;编写一个函数将所有的0移动到数…

VueRouter 源码解析

重要函数思维导图 路由注册 在开始之前&#xff0c;推荐大家 clone 一份源码对照着看。因为篇幅较长&#xff0c;函数间的跳转也很多。 使用路由之前&#xff0c;需要调用 Vue.use(VueRouter)&#xff0c;这是因为让插件可以使用 Vue export function initUse(Vue: GlobalAP…

Vue2使用定时器和闭包实现防抖和节流函数。将函数放入util.js中,供具体功能在methods中调用

Vue2使用定时器和闭包实现防抖和节流函数。将函数放入util.js中&#xff0c;供具体功能在methods中调用。<br/ 参考文档&#xff1a; 如何在Vue中优雅的使用防抖节流人类高质量JS防抖与节流机制Vue项目中使用防抖和节流vue2使用lodash中的防抖&#xff08;debounce&#xff…

Android端自定义铃声

随着移动应用竞争进入红海时代&#xff0c;如何在APP推送中别出心裁显得尤为重要。例如对自己的APP推送赋予独特的推送铃声&#xff0c;能够给用户更加理想的使用体验。 1、个性化提醒铃声有助于当收到特定类型的消息时&#xff0c;用户能够立刻识别出来。 2、不同的推送铃声…

性能测试的分类、区别以及特点这些你都知道了吗?

现在性能测试一个比较火的话题&#xff0c;究其原因是因为现在很多公司都要求测试人员会做性能测试&#xff0c;所以今天小编就来普及下性能测试的几种分类和其特点。 关于性能测试有几个名词&#xff1a;性能测试、负载测试、压力测试、并发测试&#xff0c;很多人都是混合使…

零基础制作预约小程序,微信小程序预约服务指南

随着互联网的发展&#xff0c;越来越多的服务开始转移到线上。预约服务也是其中之一。通过微信小程序&#xff0c;商家可以提供更加便捷的预约服务&#xff0c;让客户随时随地预约商品或服务。本文将介绍如何零基础制作预约小程序&#xff0c;包括使用第三方制作平台、选择合适…

可信执行环境简介:ARM 的 TrustZone

目录 可信执行环境安全世界与普通世界 - 上下文切换机制ARMv7 中的异常处理ARMv8 中的异常处理 信任区商业实施TrustZone 本身的漏洞高通Trustonic 信任区强化的弱点结论声明 可信执行环境 具有信任区的 ARM 处理器实现了架构安全性每个物理处理器内核提供两个虚拟的扩展 核心…

使用Spyder进行动态网页爬取:实战指南

导语 知乎数据的攀爬价值在于获取用户观点、知识和需求&#xff0c;进行市场调查、用户画像分析&#xff0c;以及发现热门话题和可能的新兴领域。同时&#xff0c;知乎上的问题并回答也是宝贵的学习资源&#xff0c;用于知识图谱构建和自然语言处理研究。爬取知乎数据为决策和…

扩散模型学习

第一章 1.1 的原理 给定一批训练数据X&#xff0c;假设其服从某种复杂的真实 分布p(x)&#xff0c;则给定的训练数据可视为从该分布中采样的观测样本x。 生成模型就是估计训练数据的真实分布&#xff0c;使得估计的分布q(x)和真实分布p(x)差距尽可能能的小。 使得所有训练…

Spring Security—Servlet 应用架构

目录 一、Filter&#xff08;过滤器&#xff09;回顾 二、DelegatingFilterProxy 三、FilterChainProxy 四、SecurityFilterChain 五、Security Filter 六、打印出 Security Filter 七、添加自定义 Filter 到 Filter Chain 八、处理 Security 异常 九、保存认证之间的…

hbase操作学习

1.namespace list_namespace 展示数据库 create_namespace 可以带属性名 属性值 create_namespace mydb,{author>hjp,ctime>2023-10-18}describe_namespace ‘库名’ 查看库的详细信息 alter_namespace ‘库名’ 修改表的详细信息 删除就是把method设置为unset dr…

pgbackrest归档目录满,清理后写入仍报错,分析及处理

一、 背景 pgbackrest配置的归档目录/backup被写满 归档报错 No space left on device&#xff0c;wal日志堆积 解决方法直接查看第三部分 二、 问题分析及处理 1. 目录清理 首先想到的就是清理/backup目录&#xff0c;清理后剩余6T空间 但发现pgbackrest归档依旧在报错 No …

程序被加载到进程的哪个位置?

程序被加载器加载到内存后&#xff0c;通过/proc/$pid/maps文件&#xff0c;我们可以观测到程序被加载的内存位置。那么&#xff0c;通过打印进程内存的方式&#xff0c;让我们确认程序是不是真的加载到内存&#xff0c;以及加载到内存的程序和硬盘中的文件有没有区别。 编写测…

Excel拆分单元格怎么操作?学会这4招,工作效率倍涨!

“刚刚在做一份Excel的报表&#xff0c;需要将某些单元格进行拆分&#xff0c;但是我不知道应该如何处理&#xff0c;大家在使用Excel时有什么比较简单的单元格拆分方法吗&#xff1f;” 当我们需要使用Excel处理大量数据或者创建专业报表时&#xff0c;可能需要对单元格进行拆…

微信小程序------框架

目录 视图层 WXML 数据绑定 列表渲染 条件渲染 模板 wsx事件 逻辑层 生命周期 跳转 视图层 WXML WXML&#xff08;WeiXin Markup Language&#xff09;是框架设计的一套标签语言&#xff0c;结合基础组件、事件系统&#xff0c;可以构建出页面的结构。 先在我们的项目中…