存储在堆栈或堆中的结构

时间:2018-01-06 20:25:58

标签: c memory struct allocation

我有以下脚本:

typedef struct {
    uint8_t red;
    uint8_t green;
    uint8_t blue;
} color;

color c1;
color* c2 = malloc(sizeof(color));

我想知道存储c1和c2的位置。我知道堆上的malloc存储,但c2是一个指针,那些存储在堆栈上?并且c1存储在堆还是堆栈上?

1 个答案:

答案 0 :(得分:1)

C标准没有定义甚至引用术语“堆栈”。堆栈是一种实现概念,即使大多数(如果不是所有常用的)编译器都使用这个概念。并且由编译器决定何时或什么放在堆栈上。

大多数情况下,具有自动存储持续时间的变量(例如,在您的情况下为局部变量)被推入堆栈,而动态分配的内存从堆中提取。

所以c1可能在堆栈上,指针c2也在堆栈上,但它指向的对象在堆上。

希望它有所帮助。