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

  • 本文关键字:字符 malloc 有效 c
  • 更新时间 :
  • 英文 :


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

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()则相当慢。

最新更新