哪个更有效:char a [10];或char * a; a = malloc(10);

时间:2017-07-01 17:42:28

标签: c

我在一个函数中注意到这不起作用:

char a[10];
sprintf(a, "test");
return a;

但这有效:

char *a;
a = malloc(10);
sprintf(a, "test");
return a;

问题:如果我不需要" 返回a; " ..
是否更好地使用" char a [10]; " ?如果是这样。为什么?

2 个答案:

答案 0 :(得分:2)

是的,如果你没有return a;或在函数之外的任何地方存储对a的引用,那么a只会在函数内部使用,所以将a声明为局部变量是完全正确的。这就是为什么它们被称为局部变量

此外,将a声明为本地会导致 性能下降,而malloc()则相当慢。

答案 1 :(得分:2)

malloc是对标准库的函数调用。根据编译器的当前堆碎片和堆组织,这可能是一项昂贵的操作(即使单独调用库可能会比堆栈分配消耗更多的CPU周期)。

char a[10]是堆栈帧的增量(而不是:从当前堆栈指针到10的简单减法)。

在大多数非奇特的架构上,堆栈分配明确更快。