在linux中,每个进程都有地址空间,当创建子进程时,exec()系统调用将覆盖此地址空间。我想知道的是这个地址空间是由什么组成的?地址空间中会包含哪些信息?
答案 0 :(得分:3)
地址空间由许多内存段组成。其中:
mmap()
映射到地址空间的其他文件。某些段是只读的(如程序的可执行代码,即.text
),其他段是可写的(如堆)。有些是由磁盘上的文件支持的,有些是纯粹基于内存的。
在Linux中,您可以查看/proc/<pid>/maps
的任何进程ID的内容,以查看哪些段是该进程的地址空间的一部分。
当您成功调用exec()
时,当前进程的地址空间中的所有段都将被取消映射,新的可执行文件将获得一组全新的基本映射(堆栈,堆,程序代码等)。 。)什么时候开始。