【问题标题】:HeapCreate, HeapAlloc in Linux, private allocator for LinuxHeapCreate,Linux 中的 HeapAlloc,Linux 的私有分配器
【发布时间】:2010-05-21 08:43:21
【问题描述】:

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

【问题讨论】:

  • 你能提供一个使用 HeapCreate() 的 Windows 源代码的比较。堆分配()。无堆()。和使用 mmap() 的源代码。功能做同样的事情?

标签: c++ windows linux memory allocation


【解决方案1】:

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

【讨论】:

  • 您不需要打开/dev/zero - 您可以使用MAP_ANONYMOUS 标志并将-1 作为fd 参数传递。
  • 是的,如果你这样做通常会更快,尽管MAP_ANONYMOUS 的可移植性较差(例如,它不包含在 SUSv2 中)。但你是对的,在这种情况下几乎肯定会这样做:-)
  • OP 要求一个堆,而不仅仅是一个内存块。大多数现实生活中的 malloc 实现都非常复杂。
  • @Soonts:不,他们问他们如何在 C++ 中的 Linux 上使用私有分配器更好地管理/控制内存分配并加快内存分配。一种选择是使用通用的 malloc() 实现,当然,但 glibc 中的实现已经高度优化;如果您想做得更好,您通常必须利用内存使用模式的某些方面(例如,如果您的所有分配大小相同,或者您总是一次释放所有内存,您可以简化很多事情)。此答案描述了您如何从操作系统中保留内存以便您自己管理。
猜你喜欢
  • 1970-01-01
  • 2013-01-02
  • 2018-08-24
  • 1970-01-01
  • 1970-01-01
  • 2017-10-05
  • 2018-05-31
  • 2014-05-06
  • 1970-01-01
相关资源
最近更新 更多