【问题标题】:Structs stored in stack or heap存储在堆栈或堆中的结构
【发布时间】:2018-01-06 20:25:58
【问题描述】:

我有以下脚本:

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

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

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

【问题讨论】:

  • 那不是一个有效的 C 程序。
  • c1 是一个局部变量,因此在堆栈上。而c2 是动态分配的,它位于堆部分。
  • 不是脚本。两个问题为什么要问?对你有什么不同?。你为什么要问这个已经回答了数百次的问题
  • @TonyTannous c1c2 都是堆栈中的局部变量,*c2 是堆中的内存。

标签: c memory struct allocation


【解决方案1】:

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

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

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

希望能有所帮助。

【讨论】:

    猜你喜欢
    • 2013-12-06
    • 2011-12-28
    • 2015-03-13
    • 1970-01-01
    • 1970-01-01
    • 2021-01-19
    • 2015-05-27
    • 2021-01-25
    • 2016-03-05
    相关资源
    最近更新 更多