#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()
更多,但我不明白为什么。
答案 0 :(得分:2)
我认为你应malloc()
仅针对更大的数据。您应该考虑malloc()
需要更多时间,因为它必须在堆中搜索数据块并保留它。如果在堆栈上使用struct,则不需要。所以这真的取决于你在做什么。
编辑:您还应该考虑变量的范围。如果仅在函数中需要结构,我更喜欢堆栈。
答案 1 :(得分:0)
堆分配的数据更容易与其他人共享(即跨越功能边界),尤其是当创建对象的函数需要在该函数退出时使其可用时。对于非堆数据,这是不可能的(除了使用static
时,但也会产生问题),这可能是相当有限的。