【发布时间】:2013-08-04 16:55:50
【问题描述】:
我最近看到以下帖子:
内存分配器的级别不低于 malloc。 (默认 分配器通常直接或间接调用 malloc)
分配器只允许您指定不同的分配 策略。例如,您可以使用调用 malloc 的分配器 一次检索一个大的内存池,然后用于后续 分配请求,它只返回这个池的一小块。
或者你可以将它用作一个钩子来允许你执行一些额外的操作 每次分配或释放内存时的任务。
关于你的第二个问题,malloc 是你可以不用的最低的 失去便携性。 malloc 通常使用一些实现 操作系统特定的内存分配函数,这样会比较低级 仍然。但这与您的主要问题无关,因为 C++ 分配器是更高级别的抽象。
我的问题是 - malloc 在以下操作系统中是如何实现的?
- 适用于 Windows
- 适用于 Linux
malloc() 调用/实现的特定于操作系统的函数是什么?
【问题讨论】:
-
对于 Linux,它是
sbrk -
标准库的哪个实现?
new/malloc不一定是 OS API 本身的一部分,例如在 Windows 上,只有HeapAlloc、VirtualAlloc等作为其 API 的一部分。 -
不,
sbrk在 Linux 上几乎已经过时,它正在使用mmap -
您可以使用使用静态数组的固定大小池来提供
malloc或new的实现。目前的答案是指它是如何为最流行的标准库实现完成的。我想说这个问题没有很好地表述。 -
malloc是一个内存分配器。它通常构建在虚拟内存空间管理原语之上(mmap在许多 Posix 系统上)。
标签: c++ c linux windows performance