use*_*112 8 c c++ linux windows performance
我最近看到以下帖子:
内存分配器的级别不低于malloc.(默认分配器通常直接或间接调用malloc)
分配器只允许您指定不同的分配策略.例如,您可以使用一个调用malloc一次的分配器来检索大型内存池,然后对于后续分配请求,它只返回该池的一小部分.
或者您可以将它用作钩子,以允许您在每次分配或释放内存时执行一些额外的任务.
至于你的第二个问题,malloc是你可以走的最低而不会失去便携性.malloc通常使用某些特定于操作系统的内存分配函数来实现,因此仍然是较低级别.但这与你的主要问题无关,因为C++分配器是一个更高级别的抽象.
来自:C++:内存分配器
我的问题是 - malloc如何在以下操作系统中实现?
什么是OS特定的函数被称为/ malloc()的实现?
Mat*_*son 10
在Windows中,在最新版本的MSVC中,malloc(和C++ new,因为它使用与实际内存分配部分相同的基础实现new)调用HeapAlloc().在其他版本中,例如g ++ mingw,C运行时是一个较旧的版本,它不能直接调用HeapAlloc,但在它的基础上,它仍然是HeapAlloc- 找到不同的东西,我们需要回到Windows预-95,它也有一个GlobalAlloc和LocalAlloc设定的功能-但我不认为人们使用16位编译器,这些天-至少不适用于Windows编程.
在Linux中,如果您正在使用glibc,它取决于分配的大小,无论是调用sbrk还是mmap- mmap(MAP_ANONYMOUS在标志中)用于更大的分配(超过阈值,我认为在典型实现中为2MB)
我的问题是 - malloc 在以下操作系统中是如何实现的?
在 Linux 上有两个著名的malloc实现:
dlmalloc(Doug Lea 的 malloc)
在 Linux 上,libc(如 glibc、eglibc 或 newlib)实现 ptmalloc 或 ptmalloc 的变体。
malloc() 的调用/实现是什么特定于操作系统的函数?
在 Unix 和 Linux 系统上使用系统调用sbrk。mmap请参阅man 2 sbrk和man 2 mmap了解更多信息。