gcc編譯優化

優化選項

-flto

  1. Whole Program Mode(整個程序模式):在這種模式下,編譯器對整個程序進行優化。它通過將所有源文件合并成一個單獨的中間表示(IR)文件,然后進行全局的優化和代碼生成。這種模式可以提供更大的優化空間,因為編譯器可以看到整個程序的上下文信息,從而進行更準確的優化。但是,它需要更多的時間和資源來處理整個程序,因此編譯時間會增加。

  2. LTRANS(Link-Time Transformer)模式:在這種模式下,編譯器對每個源文件進行優化,并將優化后的中間表示(IR)文件保存到目標文件中。最后,鏈接器將這些目標文件組合在一起,并進行進一步的優化。這種模式對于大型項目來說更具可行性,因為它可以將優化過程分布在多個編譯和鏈接階段,從而減少了單個編譯過程的資源消耗。然而,由于無法全局優化整個程序,它可能無法實現某些全局優化的效果。

-flto=thin

thinLTO是GCC引入的一種折衷方案,它結合了整個程序模式和LTRANS模式的優點. 在鏈接階段,鏈接器可以使用這些索引文件來進行全局的優化和代碼生成。它會根據需要只選擇需要的函數和變量,而不必處理整個程序。這樣既減少了編譯時間和資源消耗,又能夠實現一定程度的全局優化。ThinLTO模式在大型項目中特別有用,因為它能夠提供較好的優化效果,同時還保持了相對較低的編譯時間和資源消耗。

LTRANS(Link-Time Transformer)和ThinLTO(Thin Link-Time Optimization)是兩種不同的鏈接時優化(Link-Time Optimization,簡稱LTO)方式,它們在實現和效果上有一些區別。

  1. 實現方式:

    • LTRANS:LTRANS模式將每個源文件編譯為優化后的目標文件,并將這些目標文件保存在最終的可執行文件中。在鏈接階段,目標文件之間會進行進一步的優化和代碼生成。
    • ThinLTO:ThinLTO模式將每個源文件編譯為精簡的中間表示(IR)文件,并生成一個索引文件。在鏈接階段,鏈接器根據需要選擇并優化相關的函數和變量,而不必處理整個程序。
  2. 優化范圍:

    • LTRANS:LTRANS模式對整個程序進行全局優化。由于可以看到整個程序的上下文信息,因此可以進行更準確和全面的優化。但是,這可能導致編譯時間和資源消耗增加。
    • ThinLTO:ThinLTO模式只對需要的函數和變量進行優化。通過使用索引文件,在鏈接階段選擇和優化相關的部分,以減少編譯時間和資源消耗。但由于無法全局優化整個程序,某些全局優化的效果可能不如LTRANS模式。
  3. 適用范圍:

    • LTRANS:LTRANS模式適用于大型項目,可以提供更高的優化水平。它可以處理整個程序,但可能需要更長的編譯時間和更多的資源。
    • ThinLTO:ThinLTO模式在大型項目中也很有用,因為它可以在一定程度上實現全局優化,并減少編譯時間和資源消耗。由于它只處理相關的部分,因此在某些情況下,優化效果可能稍遜于LTRANS模式。

總體而言,LTRANS和ThinLTO都是有效的鏈接時優化方式,但根據項目的規模、編譯時間和優化需求來選擇適合的模式。LTRANS模式提供了更高的優化水平,而ThinLTO模式則在資源消耗方面更為友好。

-march選項用于指定目標處理器的架構

?-march選項后面可以跟隨特定的處理器架構名稱,比如-march=core2-march=armv8-a等。這樣編譯器就會根據目標處理器的架構來選擇合適的指令集,并對代碼進行相應的優化,以充分利用處理器的功能和特性。

需要注意的是,使用-march選項進行優化時,需要確保目標處理器與編譯后的可執行文件運行的環境是匹配的。如果在較新的處理器上進行編譯優化,可能會導致生成的可執行文件在較老的處理器上無法正常運行。因此,在選擇-march選項時,需要考慮目標處理器的實際環境和要求。

優化等級

00:無優化。編譯器只進行語法檢查和生成目標代碼,不進行任何優化操作。這種等級通常用于調試和代碼分析。

O1優化會消耗少多的編譯時間,它主要對代碼的分支,常量以及表達式等進行優化。如去除未使用的函數、內聯簡單函數等,以提高執行速度。?

O2會嘗試更多的寄存器級的優化以及指令級的優化,它會在編譯期間占用更多的內存和編譯時間。?如循環展開、函數調用優化等。這種等級適用于對性能有較高要求的場景。

O3在O2的基礎上進行更多的優化,例如使用偽寄存器網絡,普通函數的內聯,以及針對循環的更多優化。?更激進的內聯、更復雜的循環優化等。這種等級適用于對性能要求非常高且可以接受編譯時間延長的情況。

Os主要是對代碼大小的優化,我們基本不用做更多的關心。?通常各種優化都會打亂程序的結構,讓調試工作變得無從著手。并且會打亂執行順序,依賴內存操作順序的程序需要做相關處理才能確保程序的正確性。??

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/167140.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/167140.shtml
英文地址,請注明出處:http://en.pswp.cn/news/167140.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

手把手用GPT開發小程序全流程!就是這么easy~

大家好,我是五竹。 前段時間用GPT開發了一款小程序:GPT真牛批!三天開發一個小程序,三天積累了2000的用戶,上周末抽空又接入了流量主,感興趣的同學可以圍觀一下。 今天就來帶大家走一遍用GPT開發一款小程序的全過程&a…

為什么選擇美國VPS服務器

企業、個人和組織都需要一個穩定高效的服務器來托管他們的網站、應用程序和數據。而對于中國用戶來說,尋找一個性價比高的便宜美國VPS服務器,既能滿足需求,又能節約成本,成為了一個非常重要的問題。 VPS即虛擬專用服務器&#xf…

Sulfo-Cy3-COOH熒光染料的合成和反應機制

Sulfo-Cy3-COOH**(源自星戈瑞的花菁染料)**熒光染料的合成通常涉及多個步驟,其中包括官能團的引入、染料核心的合成以及親水性修飾等。 官能團引入: 合成Sulfo-Cy3-COOH的第一步通常是引入羧酸(COOH)官能團。這可以通過對已有的C…

C++算法 —— 貪心(3)

文章目錄 1、買賣股票的最佳時機2、買賣股票的最佳時機Ⅱ3、K次取反后最大化的數組和4、按身高排序5、優勢洗牌6、最長回文串7、增減字符串匹配 1、買賣股票的最佳時機 121. 買賣股票的最佳時機 這里最容易想到的就是暴力枚舉,兩層for循環,i 0&#xf…

RTMP直播應用與延時分析

直播應用中,RTMP和HLS基本上可以覆蓋所有客戶端觀看, HLS主要是延時比較大,RTMP主要優勢在于延時低。 一、應用場景 低延時應用場景包括: . 互動式直播:譬如2013年大行其道的美女主播,游戲直播等等各種…

TFA-Net

TFA SCA means ‘Self-Context Aggregation’ 作者未提供代碼

一文講明Mybatis 的使用 超詳細 【爆肝兩萬字教程】

我 | 在這里 🕵? 讀書 | 長沙 ?軟件工程 ? 本科 🏠 工作 | 廣州 ? Java 全棧開發(軟件工程師) 🎃 愛好 | 研究技術、旅游、閱讀、運動、喜歡流行歌曲 🏷? 標簽 | 男 自律狂人 目標明確 責任心強 ??公…

數據字典回顯功能設計與實現

數據字典回顯功能設計與實現 文章目錄 數據字典回顯功能設計與實現1. 業務場景2. 實現設計2.1 注解AOP切面2.2 注解mybatis攔截器2.3 注解序列化2.4 涉及字段直接申明成字典引用類型mybatis攔截器反序列化處理 3. 具體實現 1. 業務場景 我們日常開發中經常會遇到:數…

羊大師教你,什么搭配羊奶能夠帶來全方位的營養?

羊奶作為一種營養價值極高的乳制品,其豐富的營養成分對人體健康有著諸多益處。然而,不同的食物搭配會對羊奶的營養吸收產生不同的影響。為了讓大家更好地利用羊奶的營養價值,下面小編羊大師將為大家介紹一些與羊奶搭配的食物,幫助…

Qt實現畫的圖片移動

要實現左鍵點擊鼠標時圖片跟著鼠標移動,可以通過以下步驟來實現:1. 在QGraphicsView的構造函數中設置鼠標跟蹤屬性,以便能夠捕獲鼠標事件。cpp QGraphicsView::QGraphicsView(QWidget *parent) : QGraphicsView(parent) {setMouseTracking(tr…

Leetcode617合并二叉樹

理解題意:相同節點位置上,都有數據的話,節點值相加,只有一方有數據的話,把有數據的部分及相關子樹保留下來。 考察操作兩棵二叉樹,二叉樹的遍歷。 一般有兩種解決方式: 遞歸|迭代。 區別&#x…

element 中文地址

Element - The worlds most popular Vue UI framework 2 Menu 菜單 | Element Plus 3 偵聽器 | Vue.js vue中文官網

軟件測試職業規劃導圖

公司開發的產品專業性較強,軟件測試人員需要有很強的專業知識,現在軟件測試人員發展出現了一種測試管理者不愿意看到的景象: 1、開發技術較強的軟件測試人員轉向了軟件開發(非測試工具開發); 2、業務能力較強的測試人員轉向了軟件…

ubuntu創建新用戶, 并賦予root權限

在Ubuntu上創建新用戶可以通過adduser命令來完成。以下是創建新用戶的基本步驟: 打開終端:你可以按下Ctrl Alt T來打開終端。 使用sudo命令以管理員權限執行adduser命令。例如,如果你要創建一個名為newuser的新用戶,運行以下命…

【EI會議征稿】第三屆電子信息技術國際學術會議(EIT 2024)

The 3rd International Conference on Electronic Information Technology 第三屆電子信息技術國際學術會議(EIT 2024) 電子信息工程在我國信息化產業的發展過程中舉足輕重,且隨著現代社會的發展,航空航天領域、制造業領域和智能…

LSTM+CNN實現時間序列預測(負荷預測)

文章目錄 LSTM+CNN實現時間序列預測(PyTorch版)基于PyTorch搭建LSTM+CNN模型實現風速時間序列預測配置類時序數據集的制作數據歸一化數據集加載器搭建LSTM+CNN模型定義模型、損失函數、優化器模型訓練可視化結果十、完整源碼LSTM+CNN實現時間序列預測(Keras版)源碼模型訓練繪制…

每日一題:LeetCode-102.二叉樹的層序遍歷

每日一題系列(day 03) 前言: 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 🌈 &#x1f50e…

NX二次開發UF_CSYS_set_wcs 函數介紹

文章作者:里海 來源網站:https://blog.csdn.net/WangPaiFeiXingYuan UF_CSYS_set_wcs Defined in: uf_csys.h int UF_CSYS_set_wcs(tag_t csys_id ) overview 概述 Sets the work coordinate system to the prototype coordinate system whose tag y…

為什么技術干不過產品?

近年來,我們經常會聽到一些關于技術和產品之間關系的討論,包括最近的ChatGPT之父奧特曼被董事會開除事件。在這個問題上,有人認為技術應該優于產品,因為技術是實現產品的基礎。然而,也有人認為產品比技術更重要&#x…