亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么循環總是被編譯成“做…?而“風格”(尾跳)?

為什么循環總是被編譯成“做…?而“風格”(尾跳)?

為什么循環總是被編譯成“做…?而“風格”(尾跳)?當試圖理解程序集(在編譯器優化中)時,我看到了以下行為:像這樣一個非常基本的循環outside_loop;while (condition) {      statements;}常被編譯成(偽碼)    ; outside_loop     jmp loop_condition    ; unconditional loop_start:     loop_statements loop_condition:     condition_check     jmp_if_true loop_start     ; outside_loop但是,如果沒有打開優化,它將編譯成通??梢岳斫獾拇a:loop_condition:     condition_check     jmp_if_false loop_end     loop_statements     jmp loop_condition  ; unconditional loop_end:根據我的理解,編譯后的代碼更像這樣:goto condition;do {     statements;     condition:}while (condition_check);我看不到巨大的性能提升或代碼可讀性提升,那么為什么經常會出現這種情況呢?是否有此循環樣式的名稱,例如“跟蹤條件檢查”?
查看完整描述

3 回答

?
慕姐8265434

TA貢獻1813條經驗 獲得超2個贊

或者失敗,至少進入和超越循環,而不是完全展開的東西,往往運行到1000多個指令。誠然,這是一種時空權衡-但GCC已經通過不展開環路來有效地在這個頻譜上定位,因此它與同時生成巨大的intos和/或outros是非常不一致的。

查看完整回答
反對 回復 2019-06-24
?
吃雞游戲

TA貢獻1829條經驗 獲得超7個贊

直到GCC沒有在默認情況下展開循環。不過,我似乎確實在某些場景中展開,例如嵌套循環和矢量化。這太糟糕了,因為特別是矢量化,你最終會得到一些東西,比如一個巨大的序幕和一個巨大的尾聲,然后是一個小的沒有展開的循環體。因此,代碼的大小是巨大的,但都是為了只執行一次的部分的利益。

查看完整回答
反對 回復 2019-06-24
  • 3 回答
  • 0 關注
  • 581 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號