0

I have a function which will be called many times throughout my code. This function updates 2 values(passed as argument) in an array. Since it is called too many times, I want this function optimized.

Yes I do have a simplest code to do that,

int global_array[MAX];
int * ptr_to_my_global_array = &global_array[0];

main()
{
  int a=0,b=0;

  my_func(a,b);
  a++;b++;
  my_func(a,b);
  a++;b++;
  my_func(a,b);
  a++;b++;
  my_func(a,b);
  a++;b++;
  my_func(a,b);
  a++;b++;
  //and so on
}

void my_func(int c,int d)
{

   *ptr_to_my_global_array = c;
   ptr_to_my_global_array++;
   *ptr_to_my_global_array = d;
   ptr_to_my_global_array++;

}

Please do not suggest any mem_copy,mem_set solutions. There may be no other solution, but was just curious if I could make this faster.

4

2 に答える 2

2

関数呼び出しの代わりにマクロを使用すると、関数呼び出しのオーバーヘッドがなくなる可能性があります。ただし、コンパイラの最適化によってすでにこれが行われていることに気付くかもしれません。

ベンチマークとテスト:-)

于 2012-07-16T13:06:54.913 に答える
0

さまざまなことをテストしている場合は、次のものと比較できます。

inline void my_func(int c,int d)
{
ptr_to_my_global_array[0] = c;
ptr_to_my_global_array[1] = d;
ptr_to_my_global_array += 2;
}

おそらく、オプティマイザーは2つの間に違いがないように物事を分類しますが、出力されたコードにどのような違いがあるかを確認することもできます。

基本的に、あなたの関数は非常に単純なので、人間がオプティマイザーよりも優れた方法を実行する方法を理解するのは困難です。mainしたがって、プログラムの実際の改善は、ではなくに行う必要がありますmy_func

于 2012-07-16T13:25:58.733 に答える