关闭

Linux进程地址空间和虚拟内存

发表于:2013-5-17 13:19

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:Simba888888    来源:51Testing软件测试网采编

  二、linux进程地址空间

  由前面可得知,进程有4G的寻址空间,其中第一部分为“用户空间”,用来映射其整个进程空间(0x0000 0000-0xBFFF FFFF)即3G字节的虚拟地址;第二部分为“系统空间”,用来映射(0xC000 0000-0xFFFF FFFF)1G字节的虚拟地址。如下图

  将其更加详细地展示如下:

  环境变量:类似linux下的PATH,HOME等的环境变量,子进程会继承父进程的环境变量。

  命令行参数:类似ls -l 中-l 就是命令行参数,而ls 就是可执行程序。

  栈:就是堆栈,程序运行时需要在这里做数据运算,存储临时数据,开辟函数栈等。在Linux下,栈是高地址往低地址增长的。

  对于函数栈来说,函数运行完毕就释放内存,举例递归来说,一直开辟向下函数栈,然后由下往上收复,所以递归太多层的话很可能造成栈溢出。

  局部变量(不包含静态变量);局部可读变量(const)都分配在栈上。

  共享库和mmap内存映射区:比如很多程序都会用到的printf,函数共享库 printf.o 固定在某个物理内存位置上,让许多进程映射共享。mmap是个系统函数,可以将一个文件映射到某个物理内存位置,让许多进程共享。

  堆:即malloc申请的内存,使用free释放,如果没有主动释放,在进程运行结束时也会被释放。

  Text Segment: 可执行程序(二进制)(.text);全局初始化只读变量(const)(.rodata);字符串常量(.rodata);均在这里分配。

  Data Segment: 全局变量(初始化的在.data,未初始化的在.bss);静态变量(全局和局部)(初始化的在.data,未初始化的在.bss);全局未初始化只读变量(.bss);均在这里分配。

22/2<12
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号