在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

什么樣的代碼會被編譯器優化

學益得智能硬件 ? 來源:學益得智能硬件 ? 2025-01-16 16:38 ? 次閱讀

現在的編譯器有多智能,可能你辛辛苦苦寫的代碼,在編譯器看來就是幾句廢話,直接被刪除掉。

以 gcc 編譯器為例,編譯的時候可以加上 -O 選項來優化代碼,優化等級從 0 到 3。

寫一些簡單的代碼給大家演示下。

#include 


void delay()
{
    for (int i = 0; i < 40000; i++)
        for (int j = 0; j < 10000; j++);
}


int main()
{
    printf("helloworld
");


    delay();


    printf("helloworld
");
    
    return 0;
}

比如在兩條輸出語句之間加上延時,正常的現象是這樣的,很明顯,延時函數起了作用。

如果編譯的時候加上 O1 優化選項,在編譯器看來,delay 函數什么事都沒干,可以直接刪掉。

比較兩者的匯編代碼,就能看出開啟 O1 優化后,主函數中沒有調用 delay,運行的現象也確實沒有延時。

再比如這樣的代碼,test 函數直接返回了 1234。

如果不開啟優化,主函數會調用 test 函數,如果開啟了優化,編譯器會跳過調用 test 函數,直接取他的返回值來使用。

再來看下 O2 優化級別,比如這個代碼:

#include 


void test()
{
    printf("helloworld
");
}


int main()
{
    for (int i = 0; i < 3; i++)
    {   
        test();
    }   


    return 0;
}

循環調用 test 函數,test 函數也只是簡單的使用 printf 輸出字符串。

三份匯編代碼分別對應三個不同的優化級別,沒開優化,O1 優化,O2 優化。

沒開優化的時候,匯編代碼就是對應 C 代碼,有循環,循環中調用 test 函數。

開啟 O1 優化,循環沒了,直接調用三次 test 函數,因為循環確實浪費時間。

開啟 O2 優化,這次直接把 test 函數跳過,主函數中直接調用 puts 函數,這里的 puts ,就是 printf 優化而來,前面講過,使用 printf 直接輸出字符串,編譯器會默認優化成 puts。

最后還有一個級別是 O3,O3 在 O2 的基礎上優化更深。不過關于 O3 的優化并沒有找到簡短的代碼,這里就不給大家做演示。

在平時的學習中并不建議使用編譯器的優化策略,尤其是更高級別的優化,為了提升代碼的運行效率,很多時候編譯器會調整代碼結構,導致運行的結果跟我們預期不一樣。作為初學者,知道有這么回事就行。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 函數
    +關注

    關注

    3

    文章

    4344

    瀏覽量

    62812
  • 代碼
    +關注

    關注

    30

    文章

    4809

    瀏覽量

    68826
  • 編譯器
    +關注

    關注

    1

    文章

    1640

    瀏覽量

    49198

原文標題:什么樣的代碼會被編譯器優化

文章出處:【微信號:學益得智能硬件,微信公眾號:學益得智能硬件】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    如何編寫有利于編譯器優化代碼

    對于嵌入式系統,最終代碼的體積和效率取決于由編譯器生成的可執行代碼,而非開發人員編寫的源代碼;但是源代碼
    發表于 11-09 10:31 ?1419次閱讀
    如何編寫有利于<b class='flag-5'>編譯器</b><b class='flag-5'>優化</b>的<b class='flag-5'>代碼</b>

    請問是否有關于類似編譯器或者堆棧的文檔,或者編譯器自動壓棧個數所依據的規則是什么樣的?

    入棧大小與入參的個數、入參的類型甚至編譯器優化開的優化級別都有關系。因此想問一下是否有關于類似編譯器或者堆棧的文檔,或者編譯器自動壓棧個數所
    發表于 06-25 02:26

    SIMD計算機的優化編譯器設計

    利用處理的相關資源,提高編譯器優化性能和增強代碼可適應性是SIMD處理優化
    發表于 04-03 08:47 ?30次下載

    Keil C編譯器編程規則和代碼優化

    本內容介紹了Keil C編譯器編程規則和代碼優化,要實用好單片機就必須清楚它的內部結構組織結構,無論是在芯片的選擇還是代碼的編寫
    發表于 04-20 17:37 ?315次下載
    Keil C<b class='flag-5'>編譯器</b>編程規則和<b class='flag-5'>代碼</b><b class='flag-5'>優化</b>

    編譯器_keil的優化選項問題

    keil編譯器優化選項針對ARM,對STM32編譯的一些優化的問題
    發表于 02-25 14:18 ?3次下載

    C編譯器及其優化

    本章將幫助讀者在ARM處理上編寫高效的C代碼。本章涉及的一些技術不僅適用于ARM處理,也適用于其他RISC處理。本章首先從ARM編譯器
    發表于 10-17 17:22 ?2次下載

    編譯器優化對函數的影響

    編譯器如gcc,可以指定不同的優化參數,在某些條件下,有些函數可能會被優化掉。
    的頭像 發表于 06-22 14:58 ?2854次閱讀
    <b class='flag-5'>編譯器</b><b class='flag-5'>優化</b>對函數的影響

    如何編寫有利于編譯器優化代碼

    對于嵌入式系統,最終代碼的體積和效率取決于由編譯器生成的可執行代碼,而非開發人員編寫的源代碼;但是源代碼
    的頭像 發表于 03-29 15:58 ?1506次閱讀
    如何編寫有利于<b class='flag-5'>編譯器</b><b class='flag-5'>優化</b>的<b class='flag-5'>代碼</b>

    編譯器如何對代碼進行優化(上)

    在學習 Andorid 逆向的過程中,發現無論是哪種編譯器,生成哪個平臺的代碼,其優化思路在本質上如出一轍,在 Windwos 平臺所使用的技巧,在安卓平臺仍然適用,不外乎乘法除法計算的優化
    的頭像 發表于 02-01 16:25 ?933次閱讀

    編譯器如何對代碼進行優化(下)

    在學習 Andorid 逆向的過程中,發現無論是哪種編譯器,生成哪個平臺的代碼,其優化思路在本質上如出一轍,在 Windwos 平臺所使用的技巧,在安卓平臺仍然適用,不外乎乘法除法計算的優化
    的頭像 發表于 02-01 16:25 ?873次閱讀
    <b class='flag-5'>編譯器</b>如何對<b class='flag-5'>代碼</b>進行<b class='flag-5'>優化</b>(下)

    編譯器優化選項

    一個程序首先要保證正確性,在保證正確性的基礎上,性能也是一個重要的考量。要編寫高性能的程序,第一,必須選擇合適的算法和數據結構;第二,應該編寫編譯器能夠有效優化以轉換成高效可執行代碼的源代碼
    的頭像 發表于 11-24 15:37 ?938次閱讀
    <b class='flag-5'>編譯器</b>的<b class='flag-5'>優化</b>選項

    Keil編譯器優化方法

    我們都知道,代碼是可以通過編譯器優化的,有的時候,為了提高運行速度或者減少代碼尺寸,會開啟優化選項。
    的頭像 發表于 10-23 16:35 ?718次閱讀
    Keil<b class='flag-5'>編譯器</b><b class='flag-5'>優化</b>方法

    Triton編譯器與其他編譯器的比較

    的GPU編程框架,使開發者能夠編寫出接近手工優化的高性能GPU內核。 其他編譯器 (如GCC、Clang、MSVC等): 定位:通用編譯器,支持多種編程語言,廣泛應用于各種軟件開發場景。 目標:提供穩定、高效的
    的頭像 發表于 12-24 17:25 ?418次閱讀

    Triton編譯器優化技巧

    在現代計算環境中,編譯器的性能對于軟件的運行效率至關重要。Triton 編譯器作為一個先進的編譯器框架,提供了一系列的優化技術,以確保生成的代碼
    的頭像 發表于 12-25 09:09 ?269次閱讀

    Triton編譯器如何提升編程效率

    在現代軟件開發中,編譯器扮演著至關重要的角色。它們不僅將高級語言代碼轉換為機器可執行的代碼,還通過各種優化技術提升程序的性能。Triton 編譯器
    的頭像 發表于 12-25 09:12 ?275次閱讀
    主站蜘蛛池模板: 黄色免费网站在线播放| 国产拍拍视频| 色综合狠狠操| 特级黄色淫片| 免费看欧美一级特黄α大片| 天天摸夜夜添夜夜添国产| 天天操天天操天天干| 欧美ccc| 福利视频自拍| 欧美黄色精品| 末发育女一区二区三区| 一级毛片ab片高清毛片| 五月激情五月婷婷| 欧美视频a| 国产三级在线视频观看| 亚洲综合五月天欧美| 免费黄色三级网站| 在线视频网址免费播放| 天天躁夜夜躁狠狠躁2024| 永久在线观看www免费视频| 四虎影院在线免费观看| 毛片其地| 亚洲情a成黄在线观看| 美女福利在线观看| 69日本xxxxxxxxx78| 97色噜噜| 欧美综合成人网| 成 人色 网 站999| 免费网站黄成人影院| www.亚洲5555.com| 亚洲天堂社区| 美女国产一区| 午夜不卡在线| xxxx日本黄色| 五月婷婷六月爱| 久久99精品久久久久久臀蜜桃 | 日本不卡视频在线| 天堂色| 国产日韩精品一区二区在线观看 | 久久久久久久国产视频| 夜夜骑日日操|