c
語言中兩
種常用迴圈方式及對應彙編**
(1)
x86
彙編
83:int sum = 0x10;
0040b8e8movdword ptr [ebp-4],10h
84:for ( int i = 0; i < sum; ++i )
0040b8efmovdword ptr [ebp-8],0
0040b8f6jmpmain+31h (0040b901)
0040b8f8
moveax,dword ptr [ebp-8]
0040b8fbaddeax,1
0040b8femovdword ptr [ebp-8],eax
0040b901movecx,dword ptr [ebp-8]
0040b904cmpecx,dword ptr [ebp-4]
0040b907
jgemain+3bh (0040b90b)
85:
0040b909
jmpmain+28h (0040b8f8)
88:
89:for ( int j = sum; j > 0 ; --j )
0040b90bmovedx,dword ptr [ebp-4]
0040b90emovdword ptr [ebp-0ch],edx
0040b911jmpmain+4ch (0040b91c)
0040b913
moveax,dword ptr [ebp-0ch]
0040b916subeax,1
0040b919movdword ptr [ebp-0ch],eax
0040b91ccmpdword ptr [ebp-0ch],0
0040b920
jlemain+54h (0040b924)
90:
0040b922
jmpmain+43h (0040b913)
93:} 方式
1迴圈有7
條指令;方式2
迴圈有6
條指令。
因此效率差不多。
(2)
at&t
彙編
movl$16, -4(%ebp)//
int sum = 0x10;
----------------------------------方式
1--------------------------------------
movl$0, -8(%ebp)
.l2:
movl-8(%ebp), %eax
cmpl
-4(%ebp), %eax
jl.l4
jmp.l3
.l4:
leal-8(%ebp), %eax
incl(%eax)
jmp.l2
-----------------------------方式2----------------------------------------------
.l3:
movl-4(%ebp), %eax
movl%eax, -8(%ebp)
.l6:
cmpl
$0, -8(%ebp)
jg.l8
jmp.l7
.l8:
leal
-8(%ebp), %eax
decl
(%eax)
jmp.l6
方式
1迴圈有6
條指令;方式2
迴圈有5
條指令。
因此效率也差不多。
綜上所述:
2種方法效率差不多,但方式
1(遞增)更常用。
map兩種迭代方式的比較
set keys map.keyset if keys null 然後,這個方法有乙個問題。從map中取得關鍵字之後,我們必須每次重複返回到map中取得相對的值,這是很繁瑣和費時的。幸運的是,這裡有乙個更加簡單的途徑。map類提供了乙個稱為entryset 的方法,這個方法返回乙個map.entry...
Integer的兩種建立方式比較
integer i1 newinteger 127 integer i2 newinteger 127 system.out.println i1 i2 system.out.println i1.equals i2 結果為 false true。因為 運算子比較的是兩者位址,因為均是new出來的物...
比較建立執行緒的兩種方式
開發中 優先選擇runnable介面的方式 原因 1實現的方式沒有類的單繼承性的侷限 2.實現的方式更適合來處理多個執行緒有共資料的情況 聯絡 public classthread implements runnable 相同點 兩種方式都需要重寫run 將執行緒要執行的邏輯宣告在run 中 run...