-5

私がやろうとしているのは、未知の変数を使用して特定の行列の値を埋めることです。

最初の実装は次のとおりです。

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

ここで、phi は次元 xlength*ylength*tlength の 1D 行列です

また

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 に答える