2013-02-06 55 views
1

在我的程序中,我正在使用幾個類和大量的函數。我想知道哪一個會更快,或者他們之間在速度方面沒有區別。哪一個更快?類函數或帶類指針的函數?

第一:類功能

class mex{ 
    public: 
    int length,nof_evaluations,nof_fast_evaluations; 
    tree T; 
    calc_mex(vector<string>,vector<double>); 
}; 

將由

mex m; 
vector<string> v1; 
vector<double> v2; 
m.calc_mex(v1,v2); 

第二被稱爲:功能與類指針

class mex{ 
    public: 
    int length,nof_evaluations,nof_fast_evaluations; 
    tree T; 
}; 
calc_mex(mex*,vector<string>,vector<double>); 

將由

mex m,*mptr; 
mptr=&m; 
vector<string> v1; 
vector<double> v2; 
calc_mex(mptr,v1,v2); 
被稱爲

我在我的程序中使用了兩種方式,但更傾向於方式1,因爲它看起來更乾淨,組織更好。我也在程序的單次運行中調用這些類型的函數100K次。所以我想知道他們中的任何一個能否更好地工作。

謝謝!

+4

您是否嘗試過運行基準測試? – David

+0

我懶得這樣做。因爲我需要在這些功能中改變很多東西。 – Baykal

+0

在很多情況下,完全沒有區別。當/如果有差異,幾乎肯定是微不足道的。 –

回答

5

而不是速度的決定因素應該是功能是否在邏輯上屬於類或不。如果是,請將其設爲會員。如果不是它的獨立功能。

順便說一句,每個成員函數都隱含地傳遞了一個this指針,所以兩個版本之間沒有太大的區別。如果你真的關心性能。製作一個包含兩個版本的示例程序,並使用大型數據集在您的環境中對其進行分析。

+0

謝謝阿洛克保存。大多數這些功能在邏輯上屬於這些類。如果沒有時間差異,我會把它們放入課堂。 – Baykal

+0

你是否在循環中調用這些數十億次? – drescherjm

3

我第二通過阿洛克給出的答案保存和我必須重申,從高德納發言(他是有名的,所以聲明必須是真實的,顯然...):

程序員浪費巨大大量的時間考慮或擔心其程序中非關鍵部分的速度,而這些對效率的嘗試實際上在考慮調試和維護時會產生強烈的負面影響。我們應該忘記小效率,比如約97%的時間:不成熟的優化是所有邪惡的根源。但我們不應該在這個關鍵的3%中放棄我們的機會。

我的兩個在這個問題上仙:直到你很肯定你的「優化」,將有利於項目衡量的東西。否則,你往往會產生代碼變得更難讀和不可維護的隨着時間的推移...

1

在C++中的所有成員函數(除非他們是虛擬的)是獨立函數與「this」作爲第一個參數傳入。你不會因爲選擇一個而獲得任何速度收益,它們都只是函數調用。