C程序4G虚拟地址空间
1、从0X00000000到0X08048000是不可访问区,共128M
char* p = NULL;strcpy(p,"hello");程序会崩溃,因为NULL为0地址,是不可访问的
2、0X08048000到0X0804894是EFL头,和program头,0X0804894是程序的执行入口。
3、.text段存储代码,权限只读。
4、.data和.bss段存储数据,权限可读可写(程序运行时.bss将被加载到内存,所以4G虚拟内存里有.bss段)
bss段可以解释为best save space,节省的是磁盘上的空间。
5、.heap段为堆,堆分配的地址越来越大,向下扩展。
6、.stack段为栈,栈分配的地址越来越小,向上扩展。
7、从0XC0000000到0Xffffffff是内核空间,用户不能访问
int a =10,程序在链接时已经确定了变量a的地址
程序打印出来的是逻辑地址。