使用#pragma GCC优化进行C代码优化

gol*_*ean 3 c optimization gcc

我正在尝试使用GCC编译指示优化来设置我的C代码中的全局优化.GCC版本在Ubuntu上是4.4.3.基本思想是使用功能特定的优化级别.

#pragma GCC optimize ("O3")
Run Code Online (Sandbox Code Playgroud)

我的C代码中的main函数之前出现了编译错误

但是当我构建它时,我得到编译错误如下 -

passrecovery.c: In function âmainâ:
passrecovery.c:493: internal compiler error: Segmentation fault
Please submit a full bug report,
with preprocessed source if appropriate.
See <file:///usr/share/doc/gcc-4.4/README.Bugs> for instructions.
make: *** [all] Error 1
Run Code Online (Sandbox Code Playgroud)

我检查了错误中提到的README.Bugs文件,但没有找到关于此的线索.

是否#pragma optimize支持4.4.3 GCC?

如果是,那么我在使用此pragma优化代码时所做的错误是什么.

用于优化速度代码的任何其他替代GCC指令?

编辑:我甚至尝试#pragma GCC push_options,然后#pragma GCC optimize ("O3")在文件末尾#pragma GCC pop_options; 同样的错误.

Jon*_*ler 8

导致分段错误的ICE(内部编译器错误)始终是编译器中的错误,这就是它要求您报告错误的原因.您不应该使用任何源代码(有效或无效)使编译器崩溃.(可能会发生各种各样的事情,通常涉及拒绝编译无效代码,但崩溃不是其中之一.)

由于GCC 4.6.1是最新的,为什么不考虑升级到更新版本的GCC(不是4.4.3就是那么久).

在提交错误报告之前,您应该尽量减少繁殖.第494行以后的所有内容都可能并不重要; 幸运的是,你可以将第1行和第493行之间的材料从近500减少到20左右.你当然应该尽可能地减少它,同时保留错误.在开始砍掉代码之前,请保留崩溃编译器的版本.在保留崩溃的同时成功删除代码时,请将每个后续版本检查到VCS中.(您正在使用VCS,是不是这是一个反问句;?如果你没有,现在是一个很好的时间来启动你需要一个避免做出无法挽回的变化.)设法消除非在删除标准标题之前标准标题(您已编写的标题).尽量摆脱尽可能多的标题.注意预处理源的请求 - 我所说的代码减少减少了预处理源的大小.

  • 我建议使用δ(http://delta.tigris.org/)将(可能是预处理的)代码最小化到最小的崩溃情况,它通常可以很好地工作 (2认同)