为什么C管理堆而不是操作系统呢?

jka*_*brg 3 c heap-memory virtual-memory dynamic-memory-allocation

换句话说,为什么不free()只是将内存返回给操作系统,malloc只是从操作系统请求内存?

这解决了三个密切相关的问题:

  • 为什么C需要管理自己的堆?(这是因为操作系统只允许您分配和释放最小大小的连续内存吗?)
  • 假设我在括号中写的是真的,为什么呢?
  • 这个问题是否会影响操作系统本身,因此它无法为任何正在运行的进程分配内存块?

小智 8

为什么C需要管理自己的堆?

它实际上没有指定它需要,但它需要以malloc()标准中描述的方式实现和朋友.因此,如果有一个操作系统已经提供了这样一个界面,一个C实现可以只提供一个小包装.

是因为操作系统只允许您分配和释放最小大小的连续内存?如果这是真的,那是什么原因?

是.典型的操作系统将管理分页内存,并映射或取消映射整个内存页面.可以 "分页" 的内存单元取决于硬件架构.您可能希望阅读有关内存管理单元(MMU)如何工作的一些详细信息.在没有MMU的体系结构中,操作系统可能不会执行任何操作,而C实现只会malloc()从物理地址空间中的固定位置填充请求.