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.mzph.cn/news/112433.shtml

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

相关文章

Sarscape5.6版本中导入外部控制点、写入精密轨道文件与GACOS用于大气相位

SARscape中导入外部GCP点用于轨道精炼 https://www.cnblogs.com/enviidl/p/16524645.html在SAR处理时,有时会加入GCP点文件,SAR处理中用到的控制点分为两类:用于校正地理位置的几何控制点(Geometry GCP)和用于轨道精炼…

多测师肖sir_高级金牌讲师___ui自动化之selenium001

一、认识selenium (1)selenium是什么? a、selenium是python中的一个第三方库 b、Selenium是一个应用于web应用程序的测试工具,支持多平台,多浏览器,多语言去实现ui自动化测试,我们现在讲的Sel…

Atlassian Confluence OGNL表达式注入RCE CVE-2021-26084

影响版本 All 4.x.x versions All 5.x.x versions All 6.0.x versions All 6.1.x versions All 6.2.x versions All 6.3.x versions All 6.4.x versions All 6.5.x versions All 6.6.x versions All 6.7.x versions All 6.8.x versions All 6.9.x versions All 6.1…

RK3568笔记四:基于TensorFlow花卉图像分类部署

若该文为原创文章,转载请注明原文出处。 基于正点原子的ATK-DLRK3568部署测试。 花卉图像分类任务,使用使用 tf.keras.Sequential 模型,简单构建模型,然后转换成 RKNN 模型部署到ATK-DLRK3568板子上。 在 PC 使用 Windows 系统…

使用telegram机器人发送通知

文章目录 背景1 创建机器人2 与机器人的会话3 调用API让机器人发送消息 背景 在训练深度学习模型时,除了粗略估计外,很难预测训练何时结束。此外,我们可能还想随时随地查看训练情况,如果每次都需要登录回服务器的话并不方便。因此…

wordpress网站部署了ssl证书之后就排版混乱了

刚给自己的小网站部署了SSL证书,之后就发现https访问主页竟然乱套了。在手机上访问却是正常的。 直接上解决方案: 编辑网站根目录下的wp-config.php文件 在自定义文本处添加以下代码: if ($_SERVER[HTTP_X_FORWARDED_PROTO] https) $_SE…

PHP-FFMpeg 操作音视频

✨ 目录 🎈 安装PHP-FFMpeg🎈 视频中提取一张图片🎈 视频中提取多张图片🎈 调整视频大小🎈 视频添加水印🎈 生成音频波形🎈 音频转换🎈 给音频添加元数据🎈 拼接多个音视…

利用ArcGIS获取每一个冰川的中心位置经纬度坐标:要素转点和要素折点转点的区别

问题概述:下图是天山地区的冰川的分布,我们可以看到每一条冰川是一个面要素,要求得到每一个冰川(面要素)的中心经纬度坐标。 1.采用要素转点功能 选择工具箱的【数据管理工具】-【要素】-【要素转点】。完成之后再采用…

计算机基础知识36

数据库数据的演变史 ATM:1. 把数据都存在了文件中,文件名不规范 kevin|123 kevin123 kevin*123 2. 存储数据的文件越来越多,放在db文件夹,占用空间,查询存储不方便,速度慢 # 数据库软件能解…

lnmp架构部署Discuz论坛并配置重定向转发

lnmp架构部署Discuz论坛并配置重定向转发 文章目录 lnmp架构部署Discuz论坛并配置重定向转发环境说明部署Discuz论坛系统下载Discuz论坛系统代码包,官网地址如下:部署Discuz论坛系统步骤:解压安装Discuz源码包配置虚拟主机进入Discuz安装界面…

Janus: 逆向思维,以数据为中心的MoE训练范式

文章链接:Janus: A Unified Distributed Training Framework for Sparse Mixture-of-Experts Models 发表会议: ACM SIGCOMM 2023 (计算机网络顶会) 目录 1.背景介绍all-to-allData-centric Paradigm 2.内容摘要关键技术Janus细粒度任务调度拓扑感知优先级策略预取…

Android推送问题排查

针对MobPush智能推送服务在使用过程中可能出现的问题,本文为各位开发者们带来了针对MobPush安卓端推送问题的解决办法。 TCP在线推送排查 排查TCP在线收不到推送时,我们先通过客户端的RegistrationId接口获取设备的唯一标识 示例: MobPush…

代码随想录算法训练营第五十六天 | 1143.最长公共子序列、1035.不相交的线 、53. 最大子序和 动态规划

1143.最长公共子序列 视频讲解:动态规划子序列问题经典题目 | LeetCode:1143.最长公共子序列_哔哩哔哩_bilibili 代码随想录 (1)代码 1035.不相交的线 视频讲解:动态规划之子序列问题,换汤不换药 | Leet…

高数二阶导数例子

例子: 当 x 0 x 0 x0时 f(x) 1,当 x ≠ 0 x \ne 0 x0时, f ( x ) sin ⁡ x x f(x) \frac{\sin x}{x} f(x)xsinx​, 求f’(x)。 解: 二阶导数是导数的导数,按照定义为: f ′ ′ ( x ) lim ⁡ x →…

基于Java的垃圾分类管理系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序(小蔡coding) 代码参考数据库参考源码获取 前言 💗博主介绍:✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作者&am…

安卓逆向之抽象函数public abstract的hook定位处理

一、抽象类调用过程 1、定义接口 public abstract class AbsNetHelper{public abstract int X(int x,int y); }2、其他类调用 public class f extends AbsNetHelper {public abstract int X(int x,int y){ return xy;} }二、如何HOOK 想hook调用AbsNetHelper类的X抽…

linux uboot kenerl filesystem关系

每次烧写都是uboot,image,roots,为什么不整一套,为什么分开 什么是uboot 什么是内核,三者为什么分开 如果你上网去搜一下,你会发现这样的答案 另注:本文含有大量的错误和意测成份&#xff0c…

Linux系统编程04

进程的概念 进程(动态)是一个正在运行的程序(静态) 多道程序设计缺点: (1)缺乏隔离,各个程序之间可以直接访问,使用对方的数据 (2)内存使用率低&a…

香港服务器在国内访问太慢怎么能提高?

​  一直以来,全球化业务需求的增长是跟随着蓬勃向上的互联网而发展的。有了网络,海外贸易就在鼠标的轻点中完成。而IDC市场中的香港服务器也因为免备案政策的特性,开始逐渐成为企业想要跨越地域壁垒而考虑的对象。但在使用过程中&#xff…

新手如何找到Docker容器(redis)中的持久化文件?

具体步骤 要查看Docker容器的dump.rdb和appendonly.aof文件(如果启用了AOF持久化)的位置,我们需要知道容器中Redis配置文件的内容或者容器的数据卷的挂载位置。 这里是一般步骤: 查找容器的数据卷挂载位置 使用docker inspect命令…