哪种是用C填充数组的最快方法?

时间:2012-07-16 12:58:41

标签: c arrays pointers

我有一个函数,在我的代码中会多次调用。此函数更新数组中的2个值(作为参数传递)。由于它被调用了太多次,我想要优化这个功能。

是的,我确实有一个最简单的代码,

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++;

}

请不要建议任何mem_copy,mem_set解决方案。可能没有其他解决方案,但只是好奇我是否可以加快速度。

2 个答案:

答案 0 :(得分:2)

使用宏而不是函数调用,这可能会消除调用函数的开销。但是,您可能会发现编译器优化已经这样做了。

基准和测试: - )

答案 1 :(得分: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;
}

优化器可能会对事情进行排序,以便两者之间没有区别,但您可能会看到它对发出的代码有什么不同(如果有的话)。

基本上,你的功能非常简单,很难看出人类如何能比优化者更好地做任何事情。因此,对您的计划的任何真正改进都需要在main而非my_func