【发布时间】:2012-12-24 12:53:14
【问题描述】:
假设我有一个文件 test.c,其中包含:
char buffer1[1024];
int somefunction()
{
char buffer2[1024];
// do stuff
}
现在我知道 buffer2 是在属于某些函数调用的帧上的堆栈上分配的,但是 buffer1 分配在哪里?
【问题讨论】:
-
我错过了第 1 行的开头,还是
buffer1真的不是静态分配的? -
@H2CO3 任何既不是自动分配(通常在堆栈上)也不是动态分配(通过 malloc 等)的内存空间都是静态分配的。
static关键字对于静态分配不是必需的,它是编译器指示文件范围的关键(当与此问题的 buffer1 案例中的程序全局声明一起使用时)。 -
@mah 与 C11 还有线程存储持续时间。
-
@effeffe 线程本地存储只是动态分配的一种特殊形式(因为任务控制块是在创建线程时动态分配的,并且 TLS 与它们相关联)。没有?
-
@mah 我不知道它是如何工作的,但我认为你是对的,因为线程必须有某种动态分配。但是由于它们的生命周期与静态数据不同,并且它们不能在程序开始时进行初始化,所以我指出了这一点。