4G虚拟地址空间布局
4G的虚拟内存空间:(因为地址总线为32根,所以为4G)
其中1G是属于内核空间,另外的3G属于用户空间
所有的进程都拥有属于自己的用户空间,但却共享一个内核空间。
用户空间:
①:128M大小的不可访问区域(保留区)
我们通常将申请的临时指针变量初始化时置为NULL,可以防止后续无意使用这个指针出错,因为NULL == 0x0,将其指针指向0x0这个地址时,因为0x0这个地址属于保留区,没有访问权限的。
②:.text代码段
这个区域存储的是代码中的指令。
指令:一份代码是由数据和指令构成的,除数据外剩下的都叫做指令,另外,局部变量也属于指令,但是局部变量存储在栈上,代码运行时才在栈中预留好的区域中开辟。
③:.data数据段
这个区域存储的是代码中的各种数据,包括全局变量,静态局部变量,但两者必须为已初始化且初始化不为零的数据
④:.bss段
这个区域存储也是代码中的各种数据,不过存储的是未初始化或者是初始化了但是为零的数据。
这个段其实在可执行文件中不占空间,(.bss段)在段表中保存着,因为