gcc 优化细节

避坑指南:Makefile中.PHONY的误用与GCC编译优化的5个关键细节 本文深入解析Makefile中.PHONY的误用与GCC编译优化的5个关键细节,帮助开发者避免常见陷阱。通过时间戳分析、编译日志对比和工程实践案例,揭示高效构建的底层逻辑,特别针对自动化编译工具中的依赖关系处理提供实用建议,显著提升构建效率。 阅读详情

GCC优化概述

GCC有很多优化选项,一般包括O1,O2, O3,Os,Og等。

一般很容易通过在线手册找到对应gcc版本的上述优化选项的细节。除了开启一些选项之外,GCC的优化也设置一些parmas。


例如gcc-4.6.1的优化选项细节可以从下面的网站获得:

http://gcc.gnu.org/onlinedocs/gcc-4.6.1/gcc/Optimize-Options.html#Optimize-Options



获得本机安装的gcc的优化细节
  由于编译的具体细节除了因不同版本有区别外,还与gcc release的时候的编译参数,目标平台(例如AIX,Linux, Solaris等)版本等有关。那么有什么办法获得本机当前

安装的gcc的优化细节呢?可以通过以下命令:

gcc -Q --help=optimizers

查看开启和关闭了哪些选项。通过以下命令:

gcc -Q --help=params 

可以查看有哪些params,遗憾的是我仍然不知道每个O优化到底如何设置了这些params。

哪位童鞋知道的话别忘告诉我一声!

例如,下面的命令序列可以帮助我们获得O3比O2多开启了哪些选项。

gcc -c -Q -O3 --help=optimizers > /tmp/O3-opts
gcc -c -Q -O2 --help=optimizers > /tmp/O2-opts
diff /tmp/O2-opts /tmp/O3-opts | grep enabled



局部优化/禁止优化

有时候,我们希望对  某个函数  或者  某块代码  添加自己的优化选项这个可以通过下面的宏实现:

对代码块的优化/禁止优化:

#pragma GCC push_options
#pragma GCC optimize ("O0") 

your code

#pragma GCC pop_options 

to disable optimizations since GCC 4.4.


对函数的优化/禁止优化

__attribute__((optimize("O0"))) 




参考文章:

http://leander.blog.51cto.com/2911819/1158605





GCC源码分析(四)——优化 一、前言 本篇只介绍一下框架,就不具体介绍每个步骤了。 二、Pass框架 上一篇已经讲了gcc的中间语言的表现形式。gcc 对中间语言的每一步处理叫做一个pass。从一个函数的GENERIC树刚被转换为GIMPLE之后,接下来的工作就由一连串的pass来完成。这些pass环环相扣,最终完成整个程序的优化工作,为目标代码生成做最后的准备。 GCC的pass结构定义在gcc/tree- 阅读详情

相关推荐

GCC与AI:编译优化新革命

GCC(GNU Compiler Collection)是一个功能强大的开源编译器套件,支持多种编程语言。本文介绍了GCC的安装方法、基本用法和常用优化选项,包括如何编译多文件项目、创建和使用静态/动态库。同时探讨了GCC与AI技术的结合应用,如通过神经网络预测最佳优化级别、Graphite插件的循环优化原理,以及使用OpenACC进行深度学习计算加速。文章还提供了GCC在Web开发中的应用实例,包括将C/C++代码编译为WebAssembly,以及AI生成代码的验证方法。这些内容展示了GCC在不同场景下的

keny-大成的博客 1440

GCC编译优化和调试选项

在开启编译优化的开关时,GCC编译器的目的是:优化程序的性能和减少代码的大小,尽管会以牺牲编译时间和程序的可调试能力为代价。 对于不同的优化级别开启的对应优化开关可以通过gcc -Q -O2 --help=optimizers来查看对应的开启优化列表。 1. GCC优化选项 -O0 默认的优化选项,减少编译时间和生成完整的调试信息。 -O/-O1 这两个都是开启level 1的编译优化。开启编译优化会导致更长的编译时间,对于大函数还会消耗更多的内存空间。level1的编译优化下,编译器会尝试减少代

jinchengzhou的专栏 9498

GCC指令集详解:探索编程的内部世界

本文深入探讨了GCC指令集的内部机制,包括寄存器操作、条件执行、函数调用及中断处理等关键概念。通过分析GCC的机器描述代码,我们能够更好地理解编译器如何将高级语言转换为机器语言。

weixin_29092787的博客 380

《编译 - 编译杂记》GCC优化等级说明

GCC提供了大量的优化选项,通过不同的参数可以对编译时间、目标文件大小、执行效率三个维度进行平衡,不同的GCC版本器优化等级略有不同,笔者本文以GCC 7.5为例进行说明。 最新的版本是GCC 11.2.0。GCC 4.6.4以上的版本优化等级是一样的,只是优化选项略有差异。 1 优化等级说明 GCC 4.6.4以上版本,有**-O0、-O1、-O2、-O3、-Os、-Ofast、-Og**几个优化等级,参数 -O1、-O2、-O3 中,随着数字变大,代码的优化程度也越高,不过这在某种意义上来说,也是以牺

不问归期的博客 5262

Project 编制进度计划【项目管理】

Project 项目管理编制进度计划详解。

m0_52861684的博客 5084

lstm如何输入多维序列_深度学习也可以做时间序列异常诊断

最近在看的一篇论文里,用到了GRU、VAE等技术来做多维时间序列异常诊断。那么今天首先来聊一聊深度学习的基础知识,然后简单说一下论文。以下基础知识部分的内容,主要来源于李宏毅老师的课程。有兴趣的可以去看李老师的课程哦https://www.bilibili.com/video/BV1JE411g7XF?p=1 1、GRU(Gate Recurrent Unit):GRU是循环神经网络(Recurr...

weixin_30899789的博客 2833

linux gcc参数集

【版权申明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权) linux gcc参数集 0. GCC 与 gcc GCC, The GNU Compiler Collection includes front ends for C, C++, Objective-C, Fortran, Ada, Go, and D, as well as libraries for these lang...

手中沙的博客 478

基于YOLOv5的隧道衬砌缺陷智能检测系统

计算机视觉在工程检测领域正发挥越来越重要的作用,特别是目标检测技术通过深度学习算法实现了对复杂场景的智能分析。YOLOv5作为当前主流的目标检测框架,通过改进网络结构和训练策略,可以显著提升检测精度和效率。在隧道工程领域,结合通道注意力机制和多尺度特征融合技术,能够有效解决衬砌缺陷识别中的小目标检测难题。这种AI检测系统相比传统人工判读地质雷达图像,不仅将效率提升20倍,还能将识别准确率提高到92.3%,特别适用于3cm以上结构缺陷的自动化检测。系统通过深度可分离卷积等优化,实现了模型轻量化,便于在边缘计算

weixin_29064103的博客 326

gcc源码小记1:查看各优化等级默认选项已经修改源码设置各选项默认开关

2、read_cmdline_options函数finish_options函数用于处理编译时添加的选项得到最终各选项flag。1、default_options_optimization函数用于初始化默认打开关闭的选项。修改此处选项的分组,可以将不同优化等级默认选项互换,默认开关选项的优先级低于命令行开关。可以看到O2与O0在多个选项上的差异。gcc -Q [优化等级]--help=optimizers。在文件gcc/opts.c下。

jokerpower的博客 517

国内开发者福音:手把手教你用微软Authenticator搞定GitHub 2FA验证(附Recovery Codes保存指南)

本文详细介绍了国内开发者如何使用微软Authenticator中国版轻松配置GitHub双重身份验证(2FA),解决短信验证不可用和国际验证器访问困难的问题。重点强调了恢复码(Recovery Codes)的安全备份策略,确保账户安全无忧。

weixin_28840143的博客 435

MS51内部振荡器

MS51内部有两个RC振荡器,一个高速16MHz或24MHz(HIRC),可通过HIRC24(RCTRIM1.4)位进 行选择配置,以及一个低速10 kHz(LIRC)。它们都可被选择用作系统时钟。通过设置HIRCEN (CKEN.5)位使能HIRC,设备上电时LIRC被使能。用户可设置OSC[1:0] (CKSWT [2:1])为[0,0]选择HIRC 作为系统时钟,设置OSC[1:0](CKSWT [1:0])为[1,0]选择LIRC作为系统时钟。注意:MS51上电后HIRC 和 LIRC都被...

seraphseraphhill2008的博客 808

gcc中设置特定代码块的优化级别

<br /><br />今天碰到一个gcc优化相关的问题,为了让一个页变成脏页(页表中dirty位被置上),需要执行下面这段代码:1uint32_t *page;2// ...3page[0] = page[0];<br />最后一行代码很有可能被gcc优化掉,因为这段代码看起来没有任何实际的作用。那么如何防止gcc对这段代码做优化呢?<br />设置gcc编译时优化级别为-O0肯定是不合适的,这样对程序性能影响会比较大。stackoverflow上的Dietrich Epp给出了一个强制类型转换的方案:1

fyfhust的专栏 4838

Playwright实战:打造绕过全维度前端反爬的无头浏览器爬虫(2026实战版)

Playwright绕过前端反爬的核心是模拟真实:真实的设备指纹、真实的行为轨迹、真实的网络请求;2025年前端反爬的核心检测维度是设备指纹+行为轨迹+网络请求,三者缺一不可;实战中需重点关注WebGL/Canvas指纹模拟、行为随机性、请求头完整性,这是绕过反爬的关键;性能优化需以“不触发反爬”为前提,优先选择浏览器复用、资源拦截,而非无限制并发。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 2094

MinGw 、GCC

---------------------------------------MinGW------------------------------------------------ 简介   MinGW是指只用自由软件来生成纯粹的Win32可执行文件的编译环    境,它是Minimalist GNU on Windows的略称。这里的“纯粹”是指「使用msvcrt.dll

cibiren2009的专栏 2764

如何用python自己复现worldquant brain中的回测结果

本文介绍了在Python中复现WorldQuant Brain平台上alpha 101因子1和4的回测框架构建要点。重点分析了Brain平台的策略设置:使用TOP 3000高流动性股票(可用中证1000/2000替代);delay=1表示t日信号在t+1日开盘调仓;详细解释了market/sector/industry/subindustry四级中性化方法;说明了decay参数控制持仓权重线性衰减;以及TRUNCATION参数限制单股仓位风险。文章还探讨了不同调仓时点的实现差异,为自主构建量化回测系统提供了

夏之微风的博客 731

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

GCC源码分析(3):Tree-SSA优化框架

转自:http://blog.chinaunix.net/uid-13800995-id-67969.html * Tree SSA 优化框架分析     以下部分参考了2004年的"Design and Implementation of Tree SSA"一文。 ** 相关的文件     在这里,我们将TreeSSA优化框架看作一个GCC的模块。这个模块的接口——所有的API

If I rest, I rust. 1694

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

GCC 配置选项简介

http://hi.baidu.com/xxkln/blog/item/bd1e762393ab4f599922ed47.html  GCC 配置选项简介2010年03月04日 星期四 09:35Glibc 安装指南(适用于2.3/2.4/2.5/2.6/2.7)编译前的预备知识与要点提示Glibc-2.3.6 建议使用 GCC-4.0 编译,G

ivan240的专栏 3831

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

GCC GIMPLE

GIMPLE (GNU Compiler Collection (GCC) Internals)GIMPLE (GNU Compiler Collection (GCC) Internals)https://gcc.gnu.org/onlinedocs/gccint/GIMPLE.html 12 GIMPLE GIMPLE is a three-address representation derived from GENERIC by breaking down GENERIC expressio

RToax 735

GCC源码分析(十七) — rtl expand之后

ps: 这是源码分析系列最后一篇文章, 从<GCC源码分析(一) — 输入参数解析>到本文只是大体介绍了整个cc1编译的基本流程, 而实际上其中的细节十分复杂,尤其各个优化的pass更是gcc的精髓,因笔者了解有限,故这些内容在此系列中尚未涉及,后续有机会再加以补充. 由前可知,函数expand过程中执行了all_passes链表中的所有pass,其中pass_expand负责将gimple指令序列expand为rtl指令序列, pass_expand是一级pass中的倒数第二个,...

ashimida 1654

GCC命令

基本格式:gcc [options] file1 file2... //若不加入参数,则按默认参数依次执行编译、汇编和链接操作,生成的可执行文件名为 a.out 常用参数:-E //只执行预处理操作,直接输出到标准输出(可通过 -o 命令指定输出到文件中 ),可配合 -v 命令使用,查看头文件的搜索目录,即使用 -E -v 编译选项      -S //只执行到编译操作完成,不进行汇编操作,生成的是汇编文件(.s 或 .asm),内容为汇编语

qq_38966867的博客 209

Using GCC’s C++ Compiler

  本文讨论GNU编译器集合(GCC)中的C++编译器(g++)的典型用法,主要是指命令行选项的构造。GCC的C++编译器正常安装后,可以使用g++或c++命令执行。GCC Option Refresher本节回顾GCC的C编译器的基本使用方法。g++编译器的选项可以是单字符,比如-o,也可以多字符,比如-ansi。所以你不可以把多个单字符选项合写到一起,这和许多其他GNU和UNI

daidodo的专栏 3681

【编译】gcc -O2 编译flag里面做了什么

gcc -O2

sidemap的博客 637

[授权发表]GCC 编译背后的奥秘

这是开源书籍[《C语言编程透视》](http://www.tinylab.org/project/hello-c-world/)第二章,如果您喜欢该书,请关注我们的新浪微博[@泰晓科技](http://weibo.com/tinylaborg)。

1669

小议WebRTC拥塞控制算法:GCC介绍

网络拥塞是基于IP协议的数据报交换网络中常见的一种网络传输问题,它对网络传输的质量有严重的影响,网络拥塞是导致网络吞吐降低,网络丢包等的主要原因之一,这些问题使得上层应用无法有效的利用网络带宽获得高质量的网络传输效果。特别是在通信领域,网络拥塞导致的丢包,延迟,抖动等问题,严重的影响了通信质量,如果不能很好的解决这些问题,一个通信产品就无...

weixin_33811961的博客 222

install gcc into user's local dir

http://openwall.info/wiki/internal/gcc-local-build

chy's tech-life 418
上一篇: 交换排序与冒泡排序
下一篇: 线程终止资源清理方式
xianjian_x
博客等级 码龄14年 231粉丝 43原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值