如何发现在使用gcc时实际应用了哪些优化
How to find out which optimizations are actually applied when using gcc?
使用IBM的XL编译器系列,可以提供两个选项(-qreport
和-qlist
)来为每个源文件生成报告,其中包括应用了哪些优化或代码的哪些部分无法优化(以及原因)的信息。
有可能为GNU的g++获得类似的报告吗?如果有,如何做到?
查看-fdump-tree-[switch]
标志。您可以使用-fdump-tree-all
来获取大量信息。
此外,在中继线中,gcc -fopt-info-[options]
将为您提供更高级别的优化信息,例如,当应用特定优化时,遗漏等,例如
-fopt-info-inline-optimized-missed
打印所有成功和失败的内联优化(在本例中为stderr
)。这显然是一个非常新的功能,所以我还不确定它的支持程度。
在早期的版本中,他们有-ftree-vectorizer-verbose=n
,现在它被弃用,取而代之的是opt-info。
此处列出了所有这些选项https://gcc.gnu.org/onlinedocs/gcc/Developer-Options.html尽管挑选有用的可能有点棘手。
使用-S -fverbose-asm
列出汇编程序输出标头中每个静默应用的选项(包括优化选项)。
来源https://gcc.gnu.org/onlinedocs/gcc-7.2.0/gcc/Optimize-Options.html#Optimize-选项:
您可以使用-Q --help=optimizers
调用GCC,以找出在每个级别启用的优化的确切集合。
示例:(已启用优化选项的计数)不需要文件。
$ g++ -std=c++17 -O2 -Q --help=optimizers 2>&1 |grep enabled |wc -l
135
请注意,-O1/2/3启用的许多优化都没有单独的标志(另请参阅:c++-g++O1不等于O0以及所有相关的优化标志-堆栈溢出)
- 空基优化子对象的地址
- 试图在visual studio上用C++创建一个桌面应用程序
- FFmpeg:制作一个应用程序比直接使用ffmepg更好吗
- c++r值引用应用于函数指针
- 在C应用程序中运行C++(带有STL)函数
- 关闭||运算符优化
- 使用VerQueryValue检索应用程序的文件描述
- 如何应用尾部调用优化
- 应用于整型类型的编译时优化 'std::isfinite()'
- 我无法获得由 Clang 构建的优化 NDK 应用程序的调用堆栈
- C 控制台应用程序;在牙科诊所情况下,时间优化了队列
- 对于高度优化的矩阵多应用程序代码,MSVC和GCC之间的性能差异
- 是否可以将addr2line与使用发布优化参数编译的应用程序一起使用
- 优化I/O绑定的Win32应用程序
- 有没有一种更快的方法或优化我可以应用到我的即兴内存池
- 要求编译器内联我的类并应用通常的优化
- 如何发现在使用gcc时实际应用了哪些优化
- make_shared<>() 中的 WKWYL 优化是否会对某些多线程应用程序造成惩罚?
- 我可以得到一个日志的优化应用的编译器
- C++中的人工智能应用:虚拟功能的成本有多高?可能的优化是什么