我是一名学生,想了解更多关于动态内存管理的知识。对于C++,调用操作符new()可以在堆(空闲存储)下分配内存块。事实上,我不知道如何实现它。
这里有几个问题: 1)操作系统可以分配内存块的机制是什么?据我所知,有一些基本的内存分配方案,如first-fit,best-fit和worst-fit。操作系统是否使用其中之一在堆下动态分配内存?
2) Android、IOS、Window等不同平台,是否使用不同的内存分配算法来分配内存块?
3)对于C++,当我调用操作符new()或malloc()时,内存分配器会在堆中随机分配内存块吗?
希望有谁能帮我。
谢谢
发布于 2011-09-10 17:03:49
malloc不是系统调用,它是库(libc)例程,它通过一些内部结构为您提供所需大小的空闲内存的地址。只有当进程的数据段(即它可以使用的虚拟内存)根据malloc的逻辑不是“足够大”时,它才会执行系统调用。( Linux上放大数据段的系统调用是brk)
简单地说,malloc提供细粒度的内存管理,而OS管理可供该进程使用的更粗、更大的内存块。
不仅不同的平台,而且不同的库使用不同的malloc;一些程序(例如python)使用它的内部分配器,因为它们知道自己的使用模式,并可以通过这种方式提高性能。
有一篇关于malloc at wikipedia的长篇文章。
https://stackoverflow.com/questions/7370357
复制相似问题