OO in C 3 類模擬的效能分析

2021-03-31 08:56:30 字數 869 閱讀 5797

類模擬的效能分析

類模擬中使用了大量的函式指標,結構體等等,有必須對此進行效能分析,以便觀察這樣的結構對程式的整體效能有什麼程度的影響。

1.函式呼叫的開銷

#define counter xx

void testfunc()

在測試程式裡面,我們使用的是乙個測試函式,函式體內部可以通過改變yy的值來改變函式的耗時。測試對比是 迴圈呼叫xx次函式,和迴圈xx次函式內部的yy迴圈。

結果發現,在yy足夠小,x足夠大的情況下,函式呼叫耗時成為了主要原因。所以當乙個「簡單」功能需要「反覆」呼叫的時候,將它編寫為函式將會對效能有影響。這個時候可以使用巨集,或者inline關鍵字。

但是,實際上我設定xx=10000000(1千萬)的時候,才出現ms級別的耗時,對於非實時操作(ui等等),即使是很慢的cpu(嵌入式10m級別的),也只會在xx=10萬的時候出現短暫的函式呼叫耗時,所以實際上這個是可以忽略的。

2.普通函式呼叫和函式指標呼叫的開銷

void (*tf)();

tf=testfunc;

測試程式修改為乙個使用函式呼叫,乙個使用函式指標呼叫。測試發現對時間基本沒有什麼影響。(在第一次編寫的時候,發現在函式呼叫出現耗時的情況下(xx=1億),函式指標的呼叫要慢(release版本),呼叫耗時350:500。後來才發現這個影響是由於將變數申請為全域性的原因,全域性變數的訪問要比區域性變數慢很多)。

3.函式指標和指標結構訪問的開銷

struct a ;

測試程式修改為使用結構的函式指標,測試發現對時間基本沒有什麼影響。其實使用結構並不會產生影響,因為結構的訪問是固定偏移量的。所以結構變數的訪問和普通變數的訪問對於機器碼來說是一樣的。

測試結論:使用類模擬的辦法對效能不會產生太大的影響。

OO in C 3 類模擬的效能分析

類模擬的效能分析 類模擬中使用了大量的函式指標,結構體等等,有必須對此進行效能分析,以便觀察這樣的結構對程式的整體效能有什麼程度的影響。1 函式呼叫的開銷 define counter xx void testfunc 在測試程式裡面,我們使用的是乙個測試函式,函式體內部可以通過改變yy的值來改變函...

類模擬的效能分析

類模擬中使用了大量的函式指標,結構體等等,有必須對此進行效能分析,以便觀察這樣的結構對程式的整體效能有什麼程度的影響。1 函式呼叫的開銷 define counter xx void testfunc 在測試程式裡面,我們使用的是乙個測試函式,函式體內部可以通過改變yy的值來改變函式的耗時。測試對比...

es5 bind和es3函式模擬的bind的區別

在討論這個問題之前,我們先看一下在es5出現內建的bind函式之前,是怎麼模擬bind的 function.prototype.bind function othis var aargs array.prototype.slice.call arguments,1 ftobind this,fnop...