本地静态和局部变量的内存分配

Ara*_*orn 2 c unix

1.

void main(void)
{
  int *ptr1;
  ptr1 = (int *)malloc(..);
}
Run Code Online (Sandbox Code Playgroud)

2.

void main(void)
{
  static int *ptr2;
  ptr2 = (int *)malloc(..);
}
Run Code Online (Sandbox Code Playgroud)

我想问一下ptr1和ptr2的内存分配是怎么做的?

Bla*_*iev 10

ptr1指针本身被分配在堆栈中.ptr1指向堆上的内存.

ptr2指针本身是在程序启动时分配的(之前main被调用),并是全球性的,但恰好是可见只有在main因为它是在其范围内声明.ptr2指向堆上的内存.

ptr2在外面声明main只会使它在它下面的所有函数中都可见,但它的存储将是相同的.