C程序的三个存储区域?

时间:2014-10-14 04:39:11

标签: c storage

我对C程序中三个不同的存储区域如何工作感到有些困惑。我知道有堆栈,动态存储和静态存储。到目前为止,这是我所理解的。

  • 堆栈 - 局部变量和形式值参数。
  • 动态存储 - ?
  • 静态存储 - 连续的内存块

我不确定动态存储区域中存储了什么,我不知道我所拥有的是否适用于静态存储区域。

3 个答案:

答案 0 :(得分:2)

C有4个存储持续时间:静态,线程(自c11),自动和已分配。动态存储持续时间在C标准术语中称为已分配

int a = 0;                // static storage duration
static int b = 0;         // static storage duration
_Thread_local int c = 0;  // thread storage duration

void bla(int d)  // d has automatic storage duration
{
    int e;                // automatic storage duration
    static int f;         // static storage duration
    int *p = malloc(42 * sizeof *p);  // object allocated by malloc
                                      // has allocated storage duration
}

答案 1 :(得分:1)

您正在寻找存储时间,而不是区域。

  • 自动:变量在封闭代码块的开头分配,并在末尾取消分配。这是“在堆栈上”,但堆栈是一个实现细节。

  • 静态:变量的存储在程序开始时分配,在程序结束时解除分配。全局和static变量都在这里。

  • 线程:变量的存储在线程开始时分配,并在线程结束时解除分配。

  • 已分配:使用malloccallocrealloc按需分配存储空间,并使用free取消分配。这是人们在说“堆在堆里”时所指的内容。在C ++中,这称为动态存储持续时间。

答案 2 :(得分:0)

  • 动态存储将是从malloc()返回的内存。
  • 静态存储包括全局变量和静态变量等。