色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

    瀏覽量

    62861
  • 代碼
    +關注

    關注

    30

    文章

    4818

    瀏覽量

    68873
  • 編譯器
    +關注

    關注

    1

    文章

    1640

    瀏覽量

    49223

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

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

收藏 人收藏

    評論

    相關推薦

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

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

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

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

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

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

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

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

    編譯器優化選項

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

    Keil編譯器優化方法

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

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

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

    Triton編譯器優化技巧

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

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

    在現代軟件開發中,編譯器扮演著至關重要的角色。它們不僅將高級語言代碼轉換為機器可執行的代碼,還通過各種優化技術提升程序的性能。Triton 編譯器
    的頭像 發表于 12-25 09:12 ?288次閱讀
    主站蜘蛛池模板: 永久免费毛片| 2019一級特黃色毛片免費看| 姉调无修版ova国语版| 黄色三级网站在线观看| 少妇内射兰兰久久| 超碰97 总站 中文字幕| 欧美另类z0z000高清| gv手机在线观看| 日本不卡一二三| 丰满人妻妇伦又伦精品APP国产| 热巴两次用约老师屁股发底线球| japansemature护士| 人禽l交视频在线播放 视频| 成人精品视频99在线观看免费| 日本最新免费区中文| 高清AV熟女一区| 亚洲 欧美 中文 日韩 视频| 国产专区亚洲欧美另类在线| 亚洲欧洲免费三级网站| 久久久久嫩草影院精品| 91欧美秘密入口| 日本高清免费在线观看| 国产精品久久久久久久久齐齐| 亚洲第一色网站| 久久热免费视频| proburn中文破解版下载| 少女free大陆| 久草色香蕉视频在线| 91成品视频| 色欲精品国产AV久久久| 好大快用力深一点h视频| 97精品免费视频| 偷窥 亚洲 色 国产 日韩| 狠狠色狠狠色综合日日92| 22eee在线播放成人免费视频| 热综合一本伊人久久精品| 国产欧美一区二区精品仙草咪| 一久久| 翘臀后进美女白嫩屁股视频| 国产精品免费小视频| 伊人久久大香线蕉综合电影网|