分配给进程的虚拟内存



我一直在读取虚拟内存、分页等。我对此有些怀疑。

  1. 创建进程时,其虚拟地址空间大小是多少?

  2. 不同
  3. 工艺的大小是否不同?如果是,那么它是如何决定的?

  4. 如果进程在运行期间需要更多的虚拟地址空间,如何为其分配额外的内存量?

我会尝试按照你问的顺序回答。

  • 进程没有固定的初始大小
  • 是的,映射到进程的内存量取决于可执行文本/数据部分的大小、链接对象、初始堆栈大小和初始堆大小。 堆栈会自动增长,因为堆栈上的引用地址会导致页面错误。
  • 额外的非堆栈内存通过系统调用(sbrk(),mmap()等)向操作系统发出请求,映射到进程。

这是杰森的一个精彩的简短解释。为了补充它并带来更清晰,我建议您也了解可执行映像的格式,例如 ELF 本身。ELF可执行文件的解释将是获得基本理解的好地方。您可能还会发现 ELF(段 - ELF 可执行文件的可加载部分)和 VM 之间的连接很有用。

了解基本的可执行映像及其各个组件将补充 Jason 的答案,以及您对如何准确决定分配给进程的虚拟内存的理解。

我知道我的回答对于你问问题本身的时间来说已经很晚了,但希望它有所帮助。如果您发现更有趣和有见地的东西,请在这里分享,以便其他人也能接受教育。

最新更新