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

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

是不是比<=更快?

是不是比<=更快?

C++
智慧大石 2019-07-09 16:14:26
是不是比<=更快?我在讀一本書,作者說if( a < 901 )比if( a <= 900 ).不完全像這個簡單的例子,但是循環復雜的代碼有輕微的性能變化。我認為這必須對生成的機器代碼做一些操作,以防它是真的。
查看完整描述

3 回答

?
汪汪一只貓

TA貢獻1898條經驗 獲得超8個贊

歷史上(我們說的是20世紀80年代和90年代初),一些這是正確的架構。根本問題是,整數比較本質上是通過整數減法實現的。這就產生了以下情況。

Comparison     Subtraction----------     -----------A < B      --> A - B < 0A = B      --> A - B = 0A > B      --> A - B > 0

現在,當A < B減法必須借用一個高位才能使減法正確,就像你在用手加減時進行和借入一樣。這個“借來的”位通常被稱為進位位并且可以通過分支指令進行測試。第二個比特稱為零位如果減法是相同的,這就意味著相等。

通常至少有兩個條件分支指令,一個在進位上分支,一個在零位上。

現在,為了了解問題的核心,讓我們擴展上一個表,包括進位和零位結果。

Comparison     Subtraction  Carry Bit  Zero Bit----------     -----------  ---------  --------A < B      --> A - B < 0    0          0A = B      --> A - B = 0    1          1A > B      --> A - B > 0    1          0

所以,實現一個分支A < B可以在一條指令中完成,因為進位是清楚的。在這種情況下,就是說,

;; Implementation of "if (A < B) goto address;"cmp  A, B          ;; compare A to B
bcz  address       ;; Branch if Carry is Zero to the new address

但是,如果我們想做一個小于或等于的比較,我們需要對零標志進行額外的檢查,以捕獲相等的情況。

;; Implementation of "if (A <= B) goto address;"cmp A, B           ;; compare A to B
bcz address        ;; branch if A < B
bzs address        ;; also, Branch if the Zero bit is Set

因此,在某些機器上,使用“小于”的比較強權存錢單機指令..這在亞兆赫處理器速度和1:1 CPU與內存速度比的時代是相關的,但它在今天幾乎完全無關緊要。


查看完整回答
反對 回復 2019-07-09
?
Helenr

TA貢獻1780條經驗 獲得超4個贊

假設我們討論的是內部整數類型,就不可能有一種方法比另一種更快。顯然它們在語義上是相同的。他們都要求編譯器做同樣的事情。只有嚴重損壞的編譯器才會為其中之一生成劣等代碼。

如果有什么平臺<<=對于簡單整數類型,編譯器應該轉換<=<常量。任何編譯器,如果不是,都會是一個糟糕的編譯器(對于那個平臺來說)。


查看完整回答
反對 回復 2019-07-09
  • 3 回答
  • 0 關注
  • 338 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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