效率:动态分配与恒定长度数组

时间:2014-04-28 09:27:28

标签: c

如果我多次使用函数Foo(),并且Foo()使用临时数组,则两者中的哪一个更有效:

1)

void Foo()
{
  int arr[BIG_NUM];
  ...
}

OR:

2)

void Foo(int n)
{
  int* arr;
  ...
  arr = (int*)malloc(n*sizeof(int));
  ...
  free(arr);
}

3 个答案:

答案 0 :(得分:3)

前者可能效率更高。

你应该始终避免在可能的情况下进入堆。堆栈分配是单个指令的顺序,所以它真的可以忽略不计。堆分配可以轻松地花费数千(或更多)倍。

另外,don't cast the return value of malloc() in C

答案 1 :(得分:0)

堆栈中第一个带有数组的方法效率更高,因为堆分配比堆栈分配成本高得多。

答案 2 :(得分:0)

动态分配调用一个函数来分配内存,显然你需要检查返回值,然后另一个函数来解除分配。在这种情况下,堆栈分配更快。根据您的情况,全局数组可能会更快。