存储在堆栈或堆中的结构

Mic*_*end 1 c memory struct allocation

我有以下脚本:

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

color c1;
color* c2 = malloc(sizeof(color));
Run Code Online (Sandbox Code Playgroud)

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

Ste*_*ner 7

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

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

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

希望它以某种方式有所帮助。