-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[] 的特定单元格,或者我正在使用函数来填充矩阵 phi[] 的特定值。

哪个更快?

4

1 回答 1

1

很可能根本没有区别。编译器将内联函数和内联宏一样多。由于宏在调试器中更难使用,因此请使用函数。

正如我总是说的那样,在“哪个性能更好”的情况下,您应该始终对不同的选项进行基准测试,因为编译器的差异在某些情况下会产生一些小的差异(而在其他情况下会产生很大的差异)。在 SO 或其他一些互联网站点上询问只会告诉你其他人的想法,而不是在你的真实案例中实际发生的情况。

于 2013-05-17T17:51:08.073 回答