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