1

我是学生,想了解更多关于动态内存管理的信息。对于 C++,调用 operator new() 可以在 Heap(Free Store) 下分配一个内存块。事实上,我还没有完全了解如何实现它。

有几个问题:1)操作系统可以分配内存块的机制是什么?据我所知,有一些基本的内存分配方案,如首次适配、最佳适配和最差适配。操作系统是否使用其中之一在堆下动态分配内存?

2)对于Android、IOS、Window等不同平台,是否使用不同的内存分配算法来分配内存块?

3) 对于 C++,当我调用 operator new() 或 malloc() 时,内存分配器是否在堆中随机分配内存块?

希望任何人都可以帮助我。

谢谢

4

1 回答 1

1

malloc不是系统调用,它是 library ( libc) 例程,它通过其一些内部结构为您提供所需大小的空闲内存块的地址。如果进程的数据段(即它可以使用的虚拟内存)根据所讨论的逻辑“足够大”,它只会进行系统调用malloc。(在 Linux 上,扩大数据段的系统调用是brk

简单地说,malloc它提供了细粒度的内存管理,而操作系统则管理更粗略的、可供该进程使用的大块内存。

不仅平台不同,不同库使用的也不同malloc;一些程序(例如python)使用其内部分配器,因为它们知道自己的使用模式并且可以通过这种方式提高性能。

维基百科上有一篇关于malloc的长篇文章。

于 2011-09-10T09:03:48.783 回答