2013-05-17 30 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