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

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

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

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

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

jf_78858299 ? 來源:看雪論壇 彼岸風(fēng) ? 作者:看雪論壇 彼岸風(fēng) ? 2023-02-01 16:25 ? 次閱讀

在學(xué)習(xí) Andorid 逆向的過程中,發(fā)現(xiàn)無論是哪種編譯器,生成哪個(gè)平臺(tái)的代碼,其優(yōu)化思路在本質(zhì)上如出一轍,在 Windwos 平臺(tái)所使用的技巧,在安卓平臺(tái)仍然適用,不外乎乘法除法計(jì)算的優(yōu)化,swtich 判定樹的優(yōu)化,對(duì) if 條件句的優(yōu)化,while 循環(huán)的優(yōu)化等等,編寫本文的目的也就是為了對(duì)已學(xué)的知識(shí)進(jìn)行總結(jié)。

這里強(qiáng)烈推薦老錢和老張寫的《C++匯編與逆向分析技術(shù)揭秘》,本文大部分知識(shí)點(diǎn)都將以此書作為參考,我個(gè)人是不太喜歡看直播和視屏教程的,因?yàn)橛行╆P(guān)鍵知識(shí)點(diǎn)可能老師一句話就帶過去了,要想回來看還得來回拉進(jìn)度條,但是書不一樣,遇到讀不懂的地方可以停下來仔細(xì)思考,想回頭看也就是翻幾頁的事情,遇到那種寫的特別細(xì)的作者,那讀起來更是一種享受。

本文列舉的代碼和匯編只是為了更好的說明思路,并不代表實(shí)際代碼,好了話不多說,進(jìn)入正題。

優(yōu)化方向

  • 編譯速度優(yōu)化
  • 執(zhí)行速度優(yōu)化
  • 程序體積優(yōu)化

對(duì)于 Debug 版程序,編譯器為了滿足單步調(diào)試需求,不會(huì)對(duì)無意義的代碼進(jìn)行優(yōu)化。無意義的意思是沒有發(fā)生傳遞,沒有賦值到內(nèi)存空間。



常見的優(yōu)化類型

常量折疊

更像是預(yù)處理,編譯器會(huì)將所有可預(yù)見的值直接寫成立即數(shù)。

int n = 2 + 3 * 6;
// 編譯器在處理這段代碼時(shí)會(huì)直接將變量賦予立即數(shù)+
// mov n, 20

常量傳播

是常量折疊的“進(jìn)階版”,編譯器會(huì)掃描整個(gè)代碼段,對(duì)所有非變量運(yùn)算直接計(jì)算出結(jié)果。

int n = 2 + 3 * 6;
int m = n * 10;
// mov m, 200

減少變量

未使用即是無意義,無意義的代碼都會(huì)被優(yōu)化,上述的兩個(gè)示例,在實(shí)際編譯中是會(huì)直接被優(yōu)化掉的,因?yàn)椴⑽幢挥糜诤瘮?shù)傳參和其他操作。

編譯雖然能通過,但不會(huì)產(chǎn)生任何代碼,因?yàn)闆]有傳遞結(jié)果,對(duì)后續(xù)的代碼執(zhí)行不會(huì)造成任何影響。

int funtion1() {
    int n = 2 + 3 * 6;
    int m = n * 10;
    return 0;
}
// 無意義的變量,這個(gè)函數(shù)被編譯為匯編也將只有一句代碼
// mov eax, 0

int funtion2() {
    int n = 2 + 3 * 6;
    int m = n * 10;
    return m;
}
// 有意義的變量,但因?yàn)槌A總鞑ィ仓挥幸痪浯a
// mov eax, 200

## 分支優(yōu)化

對(duì)于所有不可達(dá)的分支也會(huì)直接被裁剪。

if(false) {
    printf("you can't find me");
}

在書中還有更多優(yōu)化示例,這里不做過多列舉,其根本就是以上幾種優(yōu)化方式,無意義的代碼將被刪除,冗余的代碼將會(huì)被精簡(jiǎn),照著這種思路想就對(duì)了。得益于編譯器的強(qiáng)大,使得再爛的代碼也能保持高效。



數(shù)學(xué)計(jì)算上對(duì)算法的優(yōu)化

我將會(huì)穿插使用 x86 和 arm 匯編,主要指令都大差不差,理解意義即可。

加法

加法沒有任何優(yōu)化空間,一個(gè) add 指令所需的 cpu 周期本就很短,除了上述的常量折疊外,一般不會(huì)對(duì)其進(jìn)行改動(dòng)。

減法

理論上加法和減法的指令周期是一致的,也不排除有些編譯器會(huì)將減數(shù)轉(zhuǎn)成補(bǔ)碼進(jìn)行相加,遇到補(bǔ)碼也能一眼看出來,直接就可以認(rèn)定這條指令為減法。

乘法

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

    關(guān)注

    30

    文章

    4857

    瀏覽量

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

    關(guān)注

    1

    文章

    1645

    瀏覽量

    49463
  • Andorid
    +關(guān)注

    關(guān)注

    0

    文章

    7

    瀏覽量

    7040
收藏 人收藏

    評(píng)論

    相關(guān)推薦

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

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

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

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

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

    本內(nèi)容介紹了Keil C編譯器編程規(guī)則和代碼優(yōu)化,要實(shí)用好單片機(jī)就必須清楚它的內(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)化選項(xiàng)問題

    keil編譯器優(yōu)化選項(xiàng)針對(duì)ARM,對(duì)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)化代碼

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

    交叉編譯器安裝教程

    交叉編譯器中“交叉”的意思就是在一個(gè)架構(gòu)編譯另外一個(gè)架構(gòu)的代碼,相當(dāng)于兩種架構(gòu)“交叉”起來了。Ubuntu 自帶的 gcc 編譯器是針對(duì)
    的頭像 發(fā)表于 09-29 09:12 ?3713次閱讀

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

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

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

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

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

    我們都知道,代碼是可以通過編譯器優(yōu)化的,有的時(shí)候,為了提高運(yùn)行速度或者減少代碼尺寸,會(huì)開啟優(yōu)化選項(xiàng)。
    的頭像 發(fā)表于 10-23 16:35 ?1079次閱讀
    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ā)場(chǎng)景。 目標(biāo):提供穩(wěn)定、高效的
    的頭像 發(fā)表于 12-24 17:25 ?618次閱讀

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

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

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

    開發(fā)者能夠更快地開發(fā)出更高效的軟件。 1. 代碼優(yōu)化 1.1 編譯時(shí)優(yōu)化 Triton 編譯器編譯
    的頭像 發(fā)表于 12-25 09:12 ?442次閱讀

    Triton編譯器與GPU編程的結(jié)合應(yīng)用

    Triton編譯器簡(jiǎn)介 Triton編譯器是一種針對(duì)并行計(jì)算優(yōu)化編譯器,它能夠自動(dòng)將高級(jí)語言代碼轉(zhuǎn)換為針對(duì)特定硬件
    的頭像 發(fā)表于 12-25 09:13 ?459次閱讀

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

    現(xiàn)在的編譯器有多智能,可能你辛辛苦苦寫的代碼,在編譯器看來就是幾句廢話,直接被刪除掉。
    的頭像 發(fā)表于 01-16 16:38 ?279次閱讀
    主站蜘蛛池模板: 三级黄色片免费观看 | 国产成人教育视频在线观看 | 一本色道久久综合亚洲精品蜜桃冫 | 狠狠色噜噜狠狠狠狠米奇777 | 蜜臀亚洲AV永久无码精品老司机 | 樱花之恋动漫免费观看 | 亚洲高清视频一区 | 亚洲AV综合色一区二区三区 | 免费国产精品视频 | 国产精品免费一区二区三区四区 | 色欲AV亚洲午夜精品无码 | 国产亚洲精品久久精品69 | 7m凹凸国产刺激在线视频 | 好紧好湿太硬了我太爽了小说 | 金发欧美一区在线观看 | 亚洲2017天堂色无码 | 一区二区三区国产亚洲网站 | 亚洲欧美日韩综合影院 | 欧美一级情欲片在线 | 好硬好湿好大再深一点动态图 | 老湿机一区午夜精品免费福利 | 欧美高清video mr.sexo | 午夜DV内射一区二区 | 优菈的乳液狂飙天堂W98 | 免费精品一区二区三区在线观看 | 久久囯产精品777蜜桃传媒 | 小小水蜜桃视频高清在线观看免费 | 国产不卡视频在线观看 | 父亲在线日本综艺免费观看全集 | 吃奶摸下的激烈免费视频 | 国产精品成人观看视频免费 | 亚洲欧洲日韩天堂无吗 | 超碰在线线公开免费视频 | 久久一本岛在免费线观看2020 | 男人j进女人j一进一出 | 男生射女生 | 夜月视频直播免费观看 | 浪荡女天天不停挨CAO日常视 | 破女在线观看视频 | 久久亚洲黄色 | 成年色黄APP下载 |