2013-05-17 31 views
-5

我想要做的是使用未知變量填充特定矩陣的值。以下哪個實現更快?

這是第一個實現:

#define PHI(I,J,K) phi[xlength*ylength*(I)+xlength*(J)+(K)] //Macro that calls function 

其中Phi是維一維矩陣xlength * ylength * tlength

phi= new double[xlength*ylength*tlength]; //code for phi 

另一種選擇是定義的功能等

void PHI(double *&phi, int &I, int &J, int &K, double &value) //declare function 
{ 
    phi[xlength*ylength*I+xlength*J+K]=value; //return specific value of phi 
} 

我會用宏或功能是這樣的:

for (int i=0;i<tlength;i++) //just making a loop here 
{ 
    for (int j=0;j<ylength;j++) 
    { 
    PHI(i,j,1)= stuff here //The macro or the function would go here 
    } 
} 

所以我在做什麼要麼使用宏指向矩陣披[]的特定細胞或我使用了一個函數來填充矩陣phi []的特定值。

哪個更快?

+0

通過基準程序找出它。堆棧溢出成員可能很聰明,但他們的大腦當然不具備現代CPU的計算能力。 – 2013-05-17 17:47:42

+0

噢好吧。哈哈!我只是檢查將所有這些東西傳遞給函數還是簡單地使用宏將會更快。如果它是未知的,我想我可以測試它。 – Mechy

+0

@ H2CO3,但我可以用這種方式使用宏,對吧?可以從宏內的for循環獲取變量,對嗎? – Mechy

回答

1

最有可能沒有差異。編譯器將內聯函數的功能與內聯宏的功能一樣。由於宏在調試器中難以使用,因此使用函數。因爲編譯器的差異可能會在某些情況下產生一些細微的差異(並且在其他情況下會產生很大的差異),所以我總是會說「哪個性能更好」,因此您應該始終對不同選項進行基準測試。詢問SO或其他一些網站只會告訴你其他人的想法,而不是真實情況下的實際情況。

+0

是的,好點 – Mechy