簡體   English   中英

在else塊中兩次或一次設置變量是否更昂貴?

[英]Is it more expensive to set a variable twice or once but inside an else block?

兩次設置變量

$var = 2;
if ($someThing) {
    $var = 1;
}

VS

使用其他

if ($someThing) {
    $var = 1;
}
else {
    $var = 2;
}

我知道$someThing在兩種情況下都會得到評估。 在兩種情況下都將設置$var 在前者中,它被設置為一次,然后有50/50的機會再次被設置。 以后只設置一次,但是還有一個else塊。

我只是好奇是否有人進行過類似的測試。 我知道這確實是微優化,但只是我的一個隨機想法。

您可以使用Vulcan Logic Dump查看每個選項的操作碼步驟

  • 選項1

      compiled vars: !0 = $var, !1 = $someThing line #* EIO op fetch ext return operands ------------------------------------------------------------------------------------- 3 0 E > ASSIGN !0, 2 4 1 > JMPZ !1, ->3 5 2 > ASSIGN !0, 1 3 > > RETURN 1 
  • 選項#2

     compiled vars: !0 = $someThing, !1 = $var line #* EIO op fetch ext return operands ------------------------------------------------------------------------------------- 3 0 E > > JMPZ !0, ->3 4 1 > ASSIGN !1, 1 2 > JMP ->4 7 3 > ASSIGN !1, 2 4 > > RETURN 1 
  • 並使用三元運算符

     compiled vars: !0 = $var, !1 = $someThing line #* EIO op fetch ext return operands ------------------------------------------------------------------------------------- 3 0 E > > JMPZ !1, ->3 1 > QM_ASSIGN ~2 1 2 > JMP ->4 3 > QM_ASSIGN ~2 2 4 > ASSIGN !0, ~2 5 > RETURN 1 

編輯

正如Barmar指出的那樣,並非所有方法都執行所有步驟,因為此處存在跳轉,並且並非所有步驟都具有相等的處理成本

是否完成$someThing並不是機會,而是機器必須付出的努力。 讓我們來看看:

$var = 2;
if ($someThing) {
    $var = 1;
}

表示分鍾 1個分配,1個檢查和最大 2個作業和1個檢查。

if ($someThing) {
    $var = 1;
}
else {
    $var = 2;
}

表示分鍾 1個分配,1個檢查和最大 1個作業和1個檢查。

else是最優的。

注意:如果$someThing在這段代碼之外依賴於$var並且被重復調用,並且要絕對確保您的代碼是最佳的,則必須進行自動成本分析 ,這不是太瑣碎的事情。

您必須在組裝中想象它,這可能會因架構而異。

這是一些基本的偽代碼:

write $var 2
bne $something x
write $var 1
x:

要么

bne $something x
write $var 1
jmp y:
x:
write $var 2
y:

第一個有時會執行額外的寫操作。 第二個有時有一個額外的跳轉指令。 我認為跳轉指令會更快,並且分支預測將使它在后台進行進一步優化,因此我將選擇第二種選擇。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM