討論 兩種迴圈方式的比較

2021-05-05 02:28:53 字數 2301 閱讀 8657

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...