關於for while的效率問題

2021-07-03 22:15:13 字數 1373 閱讀 9467

首先比較for與while的效率問題必須保證迴圈次數一致

下面簡單的分析for與while的效率問題就從最簡單的無限迴圈開始,其餘相同:

for(;;)
while(1)
這兩句都實現了無限迴圈的功能,使用gcc編譯成彙編**為:

for:

.file	"for.c"

.text

.globl main

.type main, @function

main:

.lfb0:

.cfi_startproc

pushq %rbp

.cfi_def_cfa_offset 16

.cfi_offset 6, -16

movq %rsp, %rbp

.cfi_def_cfa_register 6

.l2:

jmp .l2

.cfi_endproc

.lfe0:

.size main, .-main

.ident "gcc: (ubuntu 4.9.2-10ubuntu13) 4.9.2"

.section .note.gnu-stack,"",@progbits

while:

.file	"while.c"

.text

.globl main

.type main, @function

main:

.lfb0:

.cfi_startproc

pushq %rbp

.cfi_def_cfa_offset 16

.cfi_offset 6, -16

movq %rsp, %rbp

.cfi_def_cfa_register 6

.l2:

jmp .l2

.cfi_endproc

.lfe0:

.size main, .-main

.ident "gcc: (ubuntu 4.9.2-10ubuntu13) 4.9.2"

.section .note.gnu-stack,"",@progbits

可見除了檔名不同外,其餘全部相同,並且都是執行一次跳轉jmp。兩種迴圈效率一樣高。

參考:一般來說,do..while迴圈要比for,while迴圈效率要高,從彙編**中可以看出,在深入理解計算機3.6.5節中可以看出,進行彙編時,會先將for,while轉換為do...while

總結:for迴圈習慣寫法for(int i=0;i0);)而for(;(num-->0);)寫法效率與while((num-->0))相同。

關於Exosip的效率問題

最近一段時間利用boost多執行緒和ace多執行緒,對exosip的效能進行了比較深入一些的測試。現將測試方法分享一下,在此拋磚引玉,希望大家也可以提供一些建議。首先,原始的exosip只有2個執行緒,乙個做的事情很簡單,是等待事件,另外乙個執行緒非常忙,要做事務狀態的轉換,要收訊息,要解析訊息,要...

關於 迴圈 效率的問題

今天寫到迴圈邏輯,糾結於是用更少的迴圈呼叫函式還是用更少的函式,多迴圈兩次。於是做了個實驗,發現基於c的lua,函式呼叫的代價果然很高。local tb local max 10000000 for i 1,max do tb i i endfunction check i,max if tb i ...

關於iostream的效率問題

前言 經常有人說iostream的速度慢,io流比stdio的慢多了。但是有人測試過的,iostream的速度是超過stdio的。測試結果 c include int main fclose stream printf u n sum return 0 c include include using...