我有以下脚本:
typedef struct {
uint8_t red;
uint8_t green;
uint8_t blue;
} color;
color c1;
color* c2 = malloc(sizeof(color));
我想知道存储c1和c2的位置。我知道堆上的malloc存储,但c2是一个指针,那些存储在堆栈上?并且c1存储在堆还是堆栈上?
答案 0 :(得分:1)
C标准没有定义甚至引用术语“堆栈”。堆栈是一种实现概念,即使大多数(如果不是所有常用的)编译器都使用这个概念。并且由编译器决定何时或什么放在堆栈上。
大多数情况下,具有自动存储持续时间的变量(例如,在您的情况下为局部变量)被推入堆栈,而动态分配的内存从堆中提取。
所以c1
可能在堆栈上,指针c2
也在堆栈上,但它指向的对象在堆上。
希望它有所帮助。