HeapCreate、HeapAlloc在Linux中的私有分配器 (注意:这是一个提问标题,无需回答)

7

在Windows中,对于非常要求高的应用程序,程序员可能会使用HeapCreate和HeapAlloc来更好地管理和控制内存分配-加速它(也称为私有分配器)。在Linux c ++编程中,相应的等效方法是什么?


你能提供一下使用HeapCreate()、HeapAlloc()和HeapFree()的Windows源代码与使用mmap()函数完成相同任务的源代码的比较吗? - PatrickM
1个回答

3
如果您想使用自己的私有分配器,可以使用mmap()将一定量的内存映射到进程中,然后您可以随意使用该内存。打开一个文件描述符到/dev/zero,并将其用作mmap()的'fildes'参数。有关要传递的参数的完整详细信息,请参见man mmap。在这方面,mmap()的作用与HeapCreate()相同。

2
你不需要打开/dev/zero - 你可以使用MAP_ANONYMOUS标志,并将-1作为fd参数传递。 - caf
真的,如果可以的话最好这样做,尽管“MAP_ANONYMOUS”不太可移植(例如,它没有包含在SUSv2中)。但是你说得对,在这种情况下它几乎肯定会起作用 :-) - psmears
1
OP 要求的是堆,而不仅仅是一块内存。大多数实际的 malloc 实现都非常复杂。 - Soonts
@Soonts:不,他们问如何在Linux中使用私有分配器更好地管理/控制内存分配并加速C++。一种选择是使用通用的malloc()实现,但glibc中的实现已经高度优化;如果您想做得比这更好,通常必须利用内存使用模式的某些方面(例如,如果您的所有分配大小相同,或者您总是一次性释放所有内存,则可以大大简化事情)。此答案描述了如何从操作系统中保留内存,以便您可以自己管理它。 - psmears

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接