Linux进程地址空间解释?

时间:2013-03-18 02:14:32

标签: linux

在linux中,每个进程都有地址空间,当创建子进程时,exec()系统调用将覆盖此地址空间。我想知道的是这个地址空间是由什么组成的?地址空间中会包含哪些信息?

1 个答案:

答案 0 :(得分:3)

地址空间由许多内存段组成。其中:

  • 程序的可执行代码和静态数据
  • 筹码
  • 程序启动时加载的共享库
  • 已使用mmap()映射到地址空间的其他文件。
  • 共享内存段
  • 等...

某些段是只读的(如程序的可执行代码,即.text),其他段是可写的(如堆)。有些是由磁盘上的文件支持的,有些是纯粹基于内存的。

在Linux中,您可以查看/proc/<pid>/maps的任何进程ID的内容,以查看哪些段是该进程的地址空间的一部分。

当您成功调用exec()时,当前进程的地址空间中的所有段都将被取消映射,新的可执行文件将获得一组全新的基本映射(堆栈,堆,程序代码等)。 。)什么时候开始。