It's difficult to tell what is being asked here. This question is ambiguous, vague, incomplete, overly broad, or rhetorical and cannot be reasonably answered in its current form. For help clarifying this question so that it can be reopened, visit the help center。
6年前关闭。
在linux中,每个进程都有地址空间,当创建子进程时,这个地址空间将被exec()系统调用重写。我想知道的是这个地址空间是由什么组成的?地址空间中会有什么样的信息?
6年前关闭。
在linux中,每个进程都有地址空间,当创建子进程时,这个地址空间将被exec()系统调用重写。我想知道的是这个地址空间是由什么组成的?地址空间中会有什么样的信息?
最佳答案
地址空间由许多内存段组成。其中:
程序的可执行代码和静态数据
堆
堆栈
程序启动时加载的共享库
已用mmap()
映射到地址空间的其他文件。
共享内存段
等。。。
一些段是只读的(比如程序的可执行代码,aka.text
),其他段是可写的(比如堆)。有些是由磁盘上的文件支持的,有些是纯粹基于内存的。
在Linux中,您可以查看/proc/<pid>/maps
中的任何进程ID的内容,以查看哪些段是该进程地址空间的一部分。
成功调用exec()
时,当前进程地址空间中的所有段都将取消映射,新的可执行文件在启动时将获得一组全新的基本映射(堆栈、堆、程序代码等)。
10-06 09:17