jka*_*brg 3 c heap-memory virtual-memory dynamic-memory-allocation
换句话说,为什么不free()只是将内存返回给操作系统,malloc只是从操作系统请求内存?
这解决了三个密切相关的问题:
C需要管理自己的堆?(这是因为操作系统只允许您分配和释放最小大小的连续内存吗?)小智 8
为什么C需要管理自己的堆?
它实际上没有指定它需要,但它需要以malloc()标准中描述的方式实现和朋友.因此,如果有是一个操作系统已经提供了这样一个界面,一个C实现可以只提供一个小包装.
是因为操作系统只允许您分配和释放最小大小的连续内存?如果这是真的,那是什么原因?
是.典型的操作系统将管理分页内存,并映射或取消映射整个内存页面.可以 "分页" 的内存单元取决于硬件架构.您可能希望阅读有关内存管理单元(MMU)如何工作的一些详细信息.在没有MMU的体系结构中,操作系统可能不会执行任何操作,而C实现只会malloc()从物理地址空间中的固定位置填充请求.