C 幾種迴圈效率比較

2021-04-14 13:04:48 字數 2505 閱讀 6569

c++幾種迴圈效率比較

第一種:

for (a = 5; a > 0; a--)

編譯後產生如下彙編**:

mov    dword ptr [a], 5    ;為a賦初值

jmp    criteria            ;無條件跳轉到條件比較處

loop:             mov    eax, dword ptr[a]      ;--┐

sum    eax, 1                                 ;  ├>  a--

mov    dowrd ptr [a], eax     ;--┘

criteria:     cmp    dword ptr [a], 0    ;判斷條件,即a是否大於0

jle    exit                ;a<=0,退出迴圈

..........

jmp    loop                ;無條件跳轉到a--處

exit:

第二種:

int a = 5;

for (; a > 0; a--)

編譯後產生如下彙編**:

mov    dword ptr [a], 5    ;為a賦初值

jmp    criteria            ;無條件跳轉到條件比較處

loop:           mov    eax, dword ptr[a]   ;--┐

sum    eax, 1                              ;  ├>  a--

mov    dowrd ptr [a], eax  ;--┘

criteria:   cmp    dword ptr [a], 0    ;判斷條件,即a是否大於0

jle    exit                ;a<=0,退出迴圈

..........

jmp    loop                ;無條件跳轉到a--處

exit:

第三種:

int a = 5;

while (a > 0)

編譯後產生如下彙編**:

loop:            mov    dword ptr [a], 5    ;為a賦初值

cmp    dword ptr [a], 0    ;判斷條件,即a是否大於0 

jle    exit                ;a<=0,退出迴圈

..........

mov    eax, dword ptr[a]   ;--┐

sum    eax, 1                              ;  ├>  a-- 

mov    dowrd ptr [a], eax  ;--┘

jmp    loop                ;無條件跳轉到判斷條件處

exit:

第四種:

int a = 5;

do while (a > 0);

編譯後產生如下彙編**:

mov    dword ptr [a], 5    ;為a賦初值

loop:           ..........

mov    eax, dword ptr[a]   ;--┐

sum    eax, 1                              ;  ├>  a-- 

mov    dowrd ptr [a], eax  ;--┘

cmp    dword ptr [a], 0    ;判斷條件,即a是否大於0 

jg     loop                ;a>0繼續迴圈

第五種:

int a = 5;

loop:

..........

a --;

if (a > 0)

goto loop;

編譯後產生如下彙編**:

mov    dword ptr [a], 5    ;為a賦初值

loop:     ..........

mov    eax, dword ptr[a]   ;--┐

sum    eax, 1                              ;  ├>  a-- 

mov    dowrd ptr [a], eax  ;--┘

cmp    dword ptr [a], 0    ;判斷條件,即a是否大於0 

jle    exit

jmp    loop                ;a>0繼續迴圈

exit:

綜上所述,各種迴圈除開:

1、判斷條件。

2、變數自減(a--)。

3、賦初值。

這三點相同外,第一種和第二種有三個跳轉語句,第三種與第五種有兩個跳轉語句,第四種只有乙個跳轉語句。每個跳轉語句在cpu中執行時間為乙個時種週期。故我個人認為,第四種do迴圈執行效率最高。

numpy庫和for迴圈效率比較

numpy庫和for迴圈效率比較 原因分析在最後的鏈結中 對於numpy的矩陣v,還可以使用np.log v np.abs v np.maximum v 2,1 v等操作 import numpy as np defmf x,y return x 3 2 x 1if x y else x 3 8f ...

幾種常見SQL分頁方式效率比較

1.建立測試環境,插入100萬條資料大概耗時5分鐘 create database dbtest use dbtest 建立測試表 create table pagetest id int identity 1,1 not null,col01 int null,col02 nvarchar 50 ...

幾種常見SQL分頁方式效率比較

1.建立測試環境,插入100萬條資料大概耗時5分鐘 create database dbtest use dbtest 建立測試表 create table pagetest id int identity 1,1 not null,col01 int null,col02 nvarchar 50 ...