2011-07-16 168 views
3

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

#pragma GCC optimize ("O3") 

我得到一个编译错误 只是我在我的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 

我检查的自述.Bugs文件,在错误中提到,但没有发现关于此的线索。

是否支持4.4.3 GCC或#pragma optimize

如果是的话,那么我在使用这个编译指示来优化代码时做得不正确。

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

编辑:我甚至尝试#pragma GCC push_options然后#pragma GCC optimize ("O3")和文件#pragma GCC pop_options结束;同样的错误。

回答

8

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

由于GCC 4.6.1是最新的,为什么不考虑升级到GCC的更新版本(不是4.4.3都是旧版本)。

在提交错误报告之前,您应该尽量减少您的复制。 494行之后的所有内容可能都不重要;幸运的是,您可以将第1行和第493行之间的材料从近500个减少到20个左右。您当然应该尽可能减少它,同时保留错误。在开始切割代码之前,请保留使编译器崩溃的版本。当您在保留崩溃的同时成功移除代码时,请检查每个后续版本到您的VCS中。 (你使用VCS,是不是?这是一个反问题;如果你不是,现在是开始的好时机,你需要一个避免做出无法撤消的改变。非标准头文件(你写的)在消除标准头文件之前。尽量摆脱尽可能多的标题。请注意预处理源的请求 - 我正在谈论的代码减少会减少预处理源的大小。

+0

仅供参考我试图在main()上使用这个优化指令。这似乎是问题所在。这个指令工作正常(Atleast编译正常),如果在其他函数上使用(除了main) – goldenmean

+0

@想要更多的眼球检查导致这个的代码。只有这个代码使用的库是-lcrypt(crypt.h),string.h,stdio.h,stdlib.h,ctype.h。 – goldenmean

+0

@goldenmean:建议尝试删除“”以及首先依赖它的内容......第二。你应该看看前490行的内容,看看哪些可以批量删除,同时保持崩溃。您可以先使用评论,然后删除它们。有可能无法移动任何代码行。但这不太可能。每一行删除都是有益的。你的程序没有使用你自己的头文件可以简化生活。 –

4

对于最后一个问题:你可以把它变成一个独立的编译单元,并使用命令行开关:-O3