【问题标题】:Inside Dynamics memory management内部动态内存管理
【发布时间】:2011-11-14 06:47:09
【问题描述】:

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

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

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

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

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

谢谢

【问题讨论】:

    标签: memory malloc heap-memory new-operator microsoft-dynamics


    【解决方案1】:

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

    简单地说,malloc 提供细粒度的内存管理,而 OS 管理更粗略的、可供该进程使用的大块内存。

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

    有一篇关于malloc at wikipedia的长篇文章。

    【讨论】:

    • @King Wu:使用复选标记将其标记为答案,以便SO知道它已被满意地回答。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-05
    • 2013-11-21
    • 1970-01-01
    • 2010-10-14
    • 2010-10-16
    • 1970-01-01
    • 2010-10-14
    相关资源
    最近更新 更多