mac系统下GCC优化编译的使用

本文详细介绍了在Mac系统中使用GCC进行编译时的不同优化级别,从-O0到-O3,以及如何查看和分析优化信息。特别提到了如何通过-fopt-info选项观察编译过程中的优化效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

mac系统下GCC优化编译的使用

编译流程

预处理:g++ -E homework.cpp -o homework.i
编译:g++ -S homework.i -o homework.s //.s为汇编文件
汇编:g++ -c homework.s -o homework.o
链接:g++ homework.o -o homework

优化选项

-O0(无优化):
这是默认的优化级别,编译器不执行任何优化。
适用于调试目的或要求最小编译时间的情况。
在这种情况下,编译器会尽量缩短编译消耗(时间、空间),以便产出与程序预期结果相符的调试信息。

-O1(基本优化):
执行一些基本的优化,如删除未使用的变量、内联简单函数等。
旨在提高代码的执行效率,同时保持较快的编译速度。
相比-O0,它会对代码的分支、常量以及表达式等进行优化,但并不会执行会花费大量时间的优化操作。

-O2(中级优化):
在-O1的基础上进行更多的优化,包括更大范围的内联、循环展开、函数调用图优化等。
它可以显著提高代码的性能,但编译时间可能会稍长。
-O2是推荐的优化等级,除非有特殊的需求。

-O3(高级优化):
在-O2的基础上进行更多的优化,例如使用伪寄存器网络、普通函数的内联,以及针对循环的更多优化。
它是优化级别最高的选项,旨在进一步提高代码性能,但编译时间可能会更长。

如g++ -O2 homework.cpp -o homework,生成优化后的可执行代码
再通过time命令查询运行时间
time ./homework
在这里插入图片描述

编译过程优化信息输出

通过-fopt-info选项可以看出在原有代码的基础上进行了哪些优化

macOS系统中默认的C/C++编译器是clang/clang++,命令行使用gcc/g++或者clang/clang++来执行命令时,都是调用clang/clang++编译器,缺少-fopt-info选项。

因此,可以通过brew安装gcc,在运行命令时要使用gcc-13
gcc-13 -O2 -S homework.cpp -fopt-info

homework.cpp:37:9: optimized:  Inlining int vecadd(double*, double*, double*, size_t)/547 into int main(int, char**)/549.
homework.cpp:77:1: optimized:  Inlined void __static_initialization_and_destruction_0()/1093 into (static initializers for homework.cpp)/1224 which now has time 26.000000 and size 9, net change of -4.
homework.cpp:13:23: optimized: loop vectorized using 16 byte vectors

可以很清楚的看到进行了哪些优化

在这个基础上,可以使用vimdiff来比较优化前和优化后的汇编语言的不同之处。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值