簡體   English   中英

C 代碼優化使用#pragma GCC 優化

[英]C code optimization using #pragma GCC optimize

我正在嘗試使用 GCC pragma optimize 在我的 C 代碼中設置全局優化。 GCC 版本是 Ubuntu 上的 4.4.3。 基本思路是使用 function 具體優化級別。

#pragma GCC optimize ("O3")

我在 C 代碼中的主要 function 之前收到編譯錯誤

但是當我構建它時,我得到如下編譯錯誤 -

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

我檢查了錯誤中提到的 README.Bugs 文件,但沒有發現任何線索。

4.4.3 GCC 是否支持#pragma optimize

如果是,那么我在使用此編譯指示優化代碼時做錯了什么。

還有其他用於優化代碼速度的 GCC 指令嗎?

編輯:我什至嘗試過#pragma GCC push_options然后#pragma GCC optimize ("O3")並在文件末尾#pragma GCC pop_options 同樣的錯誤。

導致分段錯誤的 ICE(內部編譯器錯誤)始終是編譯器中的錯誤,這就是它要求您報告錯誤的原因。 您不應使用任何有效或無效的源代碼使編譯器崩潰。 (可能會發生各種各樣的事情,最常見的是拒絕編譯無效代碼,但崩潰不是其中之一。)

既然 GCC 4.6.1 是最新的,為什么不考慮升級到更新版本的 GCC(不是說 4.4.3 都那么舊)。

在提交錯誤報告之前,您應該盡量減少您的復制。 從第 494 行開始的所有內容都可能無關緊要。 幸運的是,您可以將第 1 行和第 493 行之間的材料從幾乎 500 減少到 20 左右。 您當然應該盡可能減少它,同時保留錯誤。 在開始砍代碼之前,請保留導致編譯器崩潰的版本。 當您在保留崩潰的同時成功刪除代碼時,將每個后續版本檢查到您的 VCS 中。 (您正在使用 VCS,不是嗎?這是一個修辭問題;如果您不是,現在是開始的好時機。您需要一個來避免做出無法撤消的更改。)嘗試消除非在消除標准標頭之前,標准標頭(您已編寫的標頭)。 嘗試擺脫盡可能多的標題。 請注意對預處理源的請求——我所說的代碼縮減會減少預處理源的大小。

對於最后一個問題:您可以將其放入單獨的編譯單元並使用命令行開關: -O3

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM