进程的地址空间包括堆栈段吗?
两个文件:
a.c
#include <stdio.h>
static int a = 2;
int b = 3;
void main()
{
int c = 77;
printf("&a = 0x%0x, &b = 0x%0x, &c = 0x%0x\n", &a, &b, &c);
}
****************************************************************************************
b.c
#include <stdio.h>
#include <stdlib.h>
static int aa = 2;
int bb = 3;
void main()
{
int cc = 1;
printf("&aa = 0x%0x, &bb = 0x%0x, &cc = 0x%0x\n", &aa, &bb, &cc);
}
分别运行后得到的结果如下:
a.c:
&a = 0x423168, &b = 0x42316c, &c = 0x12ff7c
b.c:
&aa = 0x421b94, &bb = 0x421b98, &cc = 0x12ff7c
可以看到全局变量 和 静态变量的地址都不一样,这说明两个进程的数据段地址不一样
而局部变量的地址相同,这表明进程的栈空间实际上是共用一块的,由操作系统维护的,是这样的吗?