【发布时间】:2017-12-09 13:54:00
【问题描述】:
#include <stdio.h>
#include <stdlib.h>
typedef struct foo {
char* text;
int num;
} foo;
int main(void) {
foo* a = malloc(sizeof(foo));
a->text = "Something";
a->num = 4;
printf("%s %d\n", a->text, a->num);
foo b;
b.text = "Something";
b.num = 4;
foo* c = &b;
printf("%s %d", c->text, c->num);
return 0;
}
两者都打印完全相同的东西。 foo* a 和 foo* c 之间的唯一区别是每个指向的位置。应该首选哪一个?我通常会看到更多malloc(),但我不明白为什么。
【问题讨论】:
-
这取决于应用程序。
-
当从
main定义时,这并不重要,因为来自main的变量比子程序中的任何其他变量的寿命更长(如果数据太大,您可能会耗尽堆栈,不过) -
如果您只打算在函数范围内使用值,或者如果您将值复制到其他地方,请使用堆栈。如果您打算返回指向您从函数分配的内存的指针,请使用堆,并且您希望在使用完内存块后在其他地方
free()它。 FWIW,堆内存比堆栈内存需要更多的周期来读写,因为它访问外部 RAM。