我注意到在函数中这不起作用:
char a[10];
sprintf(a, "test");
return a;
但这有效:
char *a;
a = malloc(10);
sprintf(a, "test");
return a;
问题:如果我不必">返回a;">..
使用">char a[10];">更好吗? 如果是这样。 为什么?
malloc
是对标准库的函数调用。根据编译器的当前堆碎片和堆组织,这可能是一个昂贵的操作(即使单独调用库也可能比堆栈分配消耗更多的 CPU 周期(。
char a[10]
是堆栈帧的增量(相反:从当前堆栈指针中简单减去 10(。
在大多数非外来架构上,堆栈分配肯定更快。
是的,如果您不必在函数外部的任何位置return a;
或存储对a
的引用,那么a
只会在函数内本地使用,因此将a
声明为局部变量是完全可以的。 这正是它们被称为局部变量的原因。
此外,将a
声明为本地将产生零性能损失,而malloc()
则相当慢。