虚拟地址空间

任何编程语言产生两种东西:指令和代码
下面实在x86体系,32位linux环境下的情况
虚拟地址空间

int a=1;
int b=0;
int c;

static int a1=1;
static int a2=0;
static int a3;
//上面的变量都叫数据在符号表中都会生成对应的符号,只有a和a1是位于.data段,而其余四个都位于.rodata段

int main()
{
int aa=1;
int bb=10;
int cc;
//而main函数中的变量并不会在符号表中产生符号,他们叫做指令,最终是存放于.text段的。不过放这个指令运行时才会在栈上划分对应的空间给变量存放
static int aa1=1;
static int aa2=0;
static int aa3;
//静态变量是存放于数据段的但是由于aa2,aa3初始化为0或者未初始化所以存放于.rodata
}

每一个进程的用户空间时私有的但是内核空间时公有的