我对C程序中三个不同的存储区域如何工作感到有些困惑。我知道有堆栈,动态存储和静态存储。到目前为止,这是我所理解的。
我不确定动态存储区域中存储了什么,我不知道我所拥有的是否适用于静态存储区域。
答案 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
变量都在这里。
线程:变量的存储在线程开始时分配,并在线程结束时解除分配。
已分配:使用malloc
,calloc
和realloc
按需分配存储空间,并使用free
取消分配。这是人们在说“堆在堆里”时所指的内容。在C ++中,这称为动态存储持续时间。
答案 2 :(得分:0)
malloc()
返回的内存。