进程的虚拟地址空间划分

虚拟地址 (virtual address): CPU启动保护模式后,程序运行在虚拟地址空间中。注意,并不是所有的“程序”都是运行在虚拟地址中。CPU在启动的时候是运行在实模式的,Bootloader以及内核在初始化页表之前并不使用虚拟地址,而是直接使用物理地址的。

每一个进程被给予它的非常私有的虚拟地址空间。对于32位的进程,地址空间是4G因为一个32位指针能够有从0x00000000到0xffffffff之间的任意值。这个范围允许指针有从4294967296个值的一个,覆盖了一个进程的4G范围。对于64位进程,地址空间是16eb因为一个64位指针能够指向18,446,744,073,709,551,616个值中的一个,覆盖一个进程的16eb范围。这是十分宽广的范围。

因为每一个进程接受它的自己的私有地址空间,当在一个进程中的线程正在运行,线程能够访问仅仅属于它的进程的内存。属于所有其他进程的内存被隐藏并且对运行的线程来说无法访问。

进程的虚拟地址空间的划分

栈空间:存放的是局部变量,函数形参,自动变量

特点:先进后出

      管理权限:系统

                  生命周期:所在函数被调用结束

           在栈空间的变量如果没有初始化,系统随机赋值

堆空间:malloc  ralloc calloc分配的空间

 特点: 先进先出

             管理权限:用户

             未初始化的全局变量为0

数据段:bss:保存未初始化的全局变量

              rodata:常量,不可以做修改的

             ./data:静态数据区,初始化的全局变量,static修饰变量

代码段

你可能感兴趣的:(linux)