欧美性猛交xxxx免费看_牛牛在线视频国产免费_天堂草原电视剧在线观看免费_国产粉嫩高清在线观看_国产欧美日本亚洲精品一5区

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

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

3天內(nèi)不再提示

什么樣的代碼會被編譯器優(yōu)化

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

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

以 gcc 編譯器為例,編譯的時候可以加上 -O 選項來優(yōu)化代碼,優(yōu)化等級從 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;
}

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

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

比較兩者的匯編代碼,就能看出開啟 O1 優(yōu)化后,主函數(shù)中沒有調(diào)用 delay,運行的現(xiàn)象也確實沒有延時。

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

如果不開啟優(yōu)化,主函數(shù)會調(diào)用 test 函數(shù),如果開啟了優(yōu)化,編譯器會跳過調(diào)用 test 函數(shù),直接取他的返回值來使用。

再來看下 O2 優(yōu)化級別,比如這個代碼:

#include 


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


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


    return 0;
}

循環(huán)調(diào)用 test 函數(shù),test 函數(shù)也只是簡單的使用 printf 輸出字符串。

三份匯編代碼分別對應(yīng)三個不同的優(yōu)化級別,沒開優(yōu)化,O1 優(yōu)化,O2 優(yōu)化。

沒開優(yōu)化的時候,匯編代碼就是對應(yīng) C 代碼,有循環(huán),循環(huán)中調(diào)用 test 函數(shù)。

開啟 O1 優(yōu)化,循環(huán)沒了,直接調(diào)用三次 test 函數(shù),因為循環(huán)確實浪費時間。

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

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

在平時的學(xué)習(xí)中并不建議使用編譯器的優(yōu)化策略,尤其是更高級別的優(yōu)化,為了提升代碼的運行效率,很多時候編譯器會調(diào)整代碼結(jié)構(gòu),導(dǎo)致運行的結(jié)果跟我們預(yù)期不一樣。作為初學(xué)者,知道有這么回事就行。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4345

    瀏覽量

    62943
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4823

    瀏覽量

    68988
  • 編譯器
    +關(guān)注

    關(guān)注

    1

    文章

    1642

    瀏覽量

    49267

原文標題:什么樣的代碼會被編譯器優(yōu)化

文章出處:【微信號:學(xué)益得智能硬件,微信公眾號:學(xué)益得智能硬件】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    如何編寫有利于編譯器優(yōu)化代碼

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

    請問是否有關(guān)于類似編譯器或者堆棧的文檔,或者編譯器自動壓棧個數(shù)所依據(jù)的規(guī)則是什么樣的?

    入棧大小與入?yún)⒌膫€數(shù)、入?yún)⒌念愋蜕踔?b class='flag-5'>編譯器優(yōu)化開的優(yōu)化級別都有關(guān)系。因此想問一下是否有關(guān)于類似編譯器或者堆棧的文檔,或者編譯器自動壓棧個數(shù)所
    發(fā)表于 06-25 02:26

    SIMD計算機的優(yōu)化編譯器設(shè)計

    利用處理的相關(guān)資源,提高編譯器優(yōu)化性能和增強代碼可適應(yīng)性是SIMD處理優(yōu)化
    發(fā)表于 04-03 08:47 ?30次下載

    Keil C編譯器編程規(guī)則和代碼優(yōu)化

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

    編譯器_keil的優(yōu)化選項問題

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

    C編譯器及其優(yōu)化

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

    編譯器優(yōu)化對函數(shù)的影響

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

    如何編寫有利于編譯器優(yōu)化代碼

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

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

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

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

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

    編譯器優(yōu)化選項

    一個程序首先要保證正確性,在保證正確性的基礎(chǔ)上,性能也是一個重要的考量。要編寫高性能的程序,第一,必須選擇合適的算法和數(shù)據(jù)結(jié)構(gòu);第二,應(yīng)該編寫編譯器能夠有效優(yōu)化以轉(zhuǎn)換成高效可執(zhí)行代碼的源代碼
    的頭像 發(fā)表于 11-24 15:37 ?959次閱讀
    <b class='flag-5'>編譯器</b>的<b class='flag-5'>優(yōu)化</b>選項

    Keil編譯器優(yōu)化方法

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

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

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

    Triton編譯器優(yōu)化技巧

    在現(xiàn)代計算環(huán)境中,編譯器的性能對于軟件的運行效率至關(guān)重要。Triton 編譯器作為一個先進的編譯器框架,提供了一系列的優(yōu)化技術(shù),以確保生成的代碼
    的頭像 發(fā)表于 12-25 09:09 ?333次閱讀

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

    在現(xiàn)代軟件開發(fā)中,編譯器扮演著至關(guān)重要的角色。它們不僅將高級語言代碼轉(zhuǎn)換為機器可執(zhí)行的代碼,還通過各種優(yōu)化技術(shù)提升程序的性能。Triton 編譯器
    的頭像 發(fā)表于 12-25 09:12 ?324次閱讀