類模擬中使用了大量的函數(shù)指針,結(jié)構(gòu)體等等,有必須對此進行性能分析,以便觀察這樣的結(jié)構(gòu)對程序的整體性能有什么程度的影響。
1.函數(shù)調(diào)用的開銷
#define COUNTER XX
void testfunc()
{
int i,k=0;
for(i=0;i }
在測試程序里面,我們使用的是一個測試函數(shù),函數(shù)體內(nèi)部可以通過改變YY的值來改變函數(shù)的耗時。測試對比是 循環(huán)調(diào)用XX次函數(shù),和循環(huán)XX次函數(shù)內(nèi)部的YY循環(huán)。
結(jié)果發(fā)現(xiàn),在YY足夠小,X足夠大的情況下,函數(shù)調(diào)用耗時成為了主要原因。所以當(dāng)一個“簡單”功能需要“反復(fù)”調(diào)用的時候,將它編寫為函數(shù)將會對性能有影響。這個時候可以使用宏,或者inline關(guān)鍵字。
但是,實際上我設(shè)置XX=10000000(1千萬)的時候,才出現(xiàn)ms級別的耗時,對于非實時操作(UI等等),即使是很慢的cpu(嵌入式10M級別的),也只會在XX=10萬的時候出現(xiàn)短暫的函數(shù)調(diào)用耗時,所以實際上這個是可以忽略的。
2.普通函數(shù)調(diào)用和函數(shù)指針調(diào)用的開銷
void (*tf)();
tf=testfunc;
測試程序修改為一個使用函數(shù)調(diào)用,一個使用函數(shù)指針調(diào)用。測試發(fā)現(xiàn)對時間基本沒有什么影響。(在第一次編寫的時候,發(fā)現(xiàn)在函數(shù)調(diào)用出現(xiàn)耗時的情況下(XX=1億),函數(shù)指針的調(diào)用要慢(release版本),調(diào)用耗時350:500。后來才發(fā)現(xiàn)這個影響是由于將變量申請為全局的原因,全局變量的訪問要比局部變量慢很多)。
3.函數(shù)指針和指針結(jié)構(gòu)訪問的開銷
struct a {
void (*tf)();
}
測試程序修改為使用結(jié)構(gòu)的函數(shù)指針,測試發(fā)現(xiàn)對時間基本沒有什么影響。其實使用結(jié)構(gòu)并不會產(chǎn)生影響,因為結(jié)構(gòu)的訪問是固定偏移量的。所以結(jié)構(gòu)變量的訪問和普通變量的訪問對于機器碼來說是一樣的。
測試結(jié)論:使用類模擬的辦法對性能不會產(chǎn)生太大的影響。
1.函數(shù)調(diào)用的開銷
#define COUNTER XX
void testfunc()
{
int i,k=0;
for(i=0;i
在測試程序里面,我們使用的是一個測試函數(shù),函數(shù)體內(nèi)部可以通過改變YY的值來改變函數(shù)的耗時。測試對比是 循環(huán)調(diào)用XX次函數(shù),和循環(huán)XX次函數(shù)內(nèi)部的YY循環(huán)。
結(jié)果發(fā)現(xiàn),在YY足夠小,X足夠大的情況下,函數(shù)調(diào)用耗時成為了主要原因。所以當(dāng)一個“簡單”功能需要“反復(fù)”調(diào)用的時候,將它編寫為函數(shù)將會對性能有影響。這個時候可以使用宏,或者inline關(guān)鍵字。
但是,實際上我設(shè)置XX=10000000(1千萬)的時候,才出現(xiàn)ms級別的耗時,對于非實時操作(UI等等),即使是很慢的cpu(嵌入式10M級別的),也只會在XX=10萬的時候出現(xiàn)短暫的函數(shù)調(diào)用耗時,所以實際上這個是可以忽略的。
2.普通函數(shù)調(diào)用和函數(shù)指針調(diào)用的開銷
void (*tf)();
tf=testfunc;
測試程序修改為一個使用函數(shù)調(diào)用,一個使用函數(shù)指針調(diào)用。測試發(fā)現(xiàn)對時間基本沒有什么影響。(在第一次編寫的時候,發(fā)現(xiàn)在函數(shù)調(diào)用出現(xiàn)耗時的情況下(XX=1億),函數(shù)指針的調(diào)用要慢(release版本),調(diào)用耗時350:500。后來才發(fā)現(xiàn)這個影響是由于將變量申請為全局的原因,全局變量的訪問要比局部變量慢很多)。
3.函數(shù)指針和指針結(jié)構(gòu)訪問的開銷
struct a {
void (*tf)();
}
測試程序修改為使用結(jié)構(gòu)的函數(shù)指針,測試發(fā)現(xiàn)對時間基本沒有什么影響。其實使用結(jié)構(gòu)并不會產(chǎn)生影響,因為結(jié)構(gòu)的訪問是固定偏移量的。所以結(jié)構(gòu)變量的訪問和普通變量的訪問對于機器碼來說是一樣的。
測試結(jié)論:使用類模擬的辦法對性能不會產(chǎn)生太大的影響。