这实际上是关于内存管理的理论问题。由于不同的操作系统以不同的方式实现,我不得不减轻对知识的渴求,询问其中只有一个是如何工作的:(最好是开源和广泛使用的:Linux。
以下列出了我在整个谜题中所知道的事项:
malloc()
是用户空间。 libc负责系统调用作业(调用brk
/ sbrk
/ mmap
...)。它设法获得大块内存,由虚拟地址范围描述。该库会对这些块进行切片并设法响应用户应用程序请求。brk
/ sbrk
系统调用的内容。我知道什么'程序打破'手段。这些调用基本上推动了程序中断偏移。这就是libc获取虚拟内存块的方式。*allocated_integer = 5;
。好。怎么办?如果brk
/ sbrk
仅更新流程中的偏移量'进程表中的条目,或者其他什么,物理内存的实际分配方式?free_area
数据结构? (http://www.tldp.org/LDP/tlk/mm/memory.html, 3.4.1页面分配部分)答案 0 :(得分:1)
好吧,在最终找到一个优秀的指南(http://duartes.org/gustavo/blog/post/how-the-kernel-manages-your-memory/)并花了一些时间挖掘Linux内核之后,我找到了答案......
brk
仅推送虚拟内存区域。*allocated_integer = 5;
时,会发生页面错误。