我最近看到了下面这个帖子:
内存分配器的级别并不比 malloc 低。 (默认
分配器通常直接或间接调用 malloc)
分配器只允许您指定不同的分配
策略。例如,您可以使用调用 malloc 的分配器
一次检索大量内存,然后进行后续操作
分配请求,它只返回该池的一小部分。
或者你可以使用它作为一个钩子来允许你执行一些额外的操作
每次分配或释放内存时都会执行任务。
至于你的第二个问题,malloc 是你可以没有的最低的
失去便携性。malloc 通常使用一些来实现
操作系统特定的内存分配函数,所以这会是较低的水平
仍然。但这与你的主要问题无关,因为 C++
分配器是更高级别的抽象。
from: C++:内存分配器 https://stackoverflow.com/questions/4642671/c-memory-allocators
我的问题是 - malloc 在以下操作系统中是如何实现的?
malloc() 的调用/实现是什么特定于操作系统的函数?
在 Windows 中,在最新版本的 MSVC、malloc(和 C++new
,因为它是使用与实际内存分配部分相同的基础来实现的new
) calls HeapAlloc() http://msdn.microsoft.com/en-us/library/aa366597%28v=vs.85%29.aspx。在其他版本中,例如 g++ mingw,C 运行时是较旧的版本,它不会直接调用HeapAlloc
,但在它的基础上,它仍然是HeapAlloc
- 要找到不同的东西,我们需要回到 95 之前的 Windows,它确实有一个GlobalAlloc
and LocalAlloc
函数集 - 但我认为现在人们不使用 16 位编译器 - 至少不用于 Windows 编程。
在 Linux 中,如果您使用glibc
,这取决于分配的大小是否调用sbrk http://manpages.ubuntu.com/manpages/hardy/man2/brk.2.html or mmap http://manpages.ubuntu.com/manpages/lucid/man2/mmap.2.html - mmap
(with MAP_ANONYMOUS
在标志中)用于更大的分配(超过阈值,我认为在典型实现中为 2MB)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)