OO in C(3): 類類比的效能分析
來源:互聯網
上載者:User
類類比的效能分析 類類比中使用了大量的函數指標,結構體等等,有必須對此進行效能分析,以便觀察這樣的結構對程式的整體效能有什麼程度的影響。 1.函數調用的開銷#define COUNTER XXvoid testfunc(){ int i,k=0; for(i=0;i<YY;i++){k++;}} 在測試程式裡面,我們使用的是一個測試函數,函數體內部可以通過改變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 { void (*tf)();}; 測試程式修改為使用結構的函數指標,測試發現對時間基本沒有什麼影響。其實使用結構並不會產生影響,因為結構的訪問是固定位移量的。所以結構變數的訪問和普通變數的訪問對於機器碼來說是一樣的。 測試結論:使用類類比的辦法對效能不會產生太大的影響。