如果我多次使用函数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);
}
答案 0 :(得分:3)
前者可能效率更高。
你应该始终避免在可能的情况下进入堆。堆栈分配是单个指令的顺序,所以它真的可以忽略不计。堆分配可以轻松地花费数千(或更多)倍。
答案 1 :(得分:0)
堆栈中第一个带有数组的方法效率更高,因为堆分配比堆栈分配成本高得多。
答案 2 :(得分:0)
动态分配调用一个函数来分配内存,显然你需要检查返回值,然后另一个函数来解除分配。在这种情况下,堆栈分配更快。根据您的情况,全局数组可能会更快。