何时使指针指向堆上的结构与堆栈上的结构?

时间:2017-07-05 18:54:53

标签: c malloc

#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* afoo* c之间的唯一区别在于每个人指向的位置。应该首选哪一个?我经常看到malloc()更多,但我不明白为什么。

2 个答案:

答案 0 :(得分:2)

我认为你应malloc()仅针对更大的数据。您应该考虑malloc()需要更多时间,因为它必须在堆中搜索数据块并保留它。如果在堆栈上使用struct,则不需要。所以这真的取决于你在做什么。

编辑:您还应该考虑变量的范围。如果仅在函数中需要结构,我更喜欢堆栈。

答案 1 :(得分:0)

堆分配的数据更容易与其他人共享(即跨越功能边界),尤其是当创建对象的函数需要在该函数退出时使其可用时。对于非堆数据,这是不可能的(除了使用static时,但也会产生问题),这可能是相当有限的。