0

有没有什么:

  • 分配/解除分配/重新分配许多可变大小的对象而没有碎片(基本上是什么malloc)和
  • 跟踪用于这些分配的所有内存页面,以便我可以
  • 稍后mprotect将所有这些页面设为只读
  • 最好没有任何锁定 - 所有访问都将是单线程的
  • 可以在 Linux 和 OS X 上运行,最好在 Windows 上使用等效的东西?

我想不出用标准内存分配函数来做这件事的方法。想到的唯一策略是使用自定义内存池而不是malloc. 所以我的问题是:有没有办法在没有自定义malloc或(如果没有)关于使用什么的建议的情况下做到这一点?

我可以很容易地包装malloc并跟踪它使用过的所有页面我如何保证一旦我调用mprotect了这些页面malloc就不会尝试使用在分配块开始之前或结束之后“捕获”的内存在受影响的页面之一内?

4

1 回答 1

1

开源内存池系统将在 MPS 本身不接触的操作系统页面大小的块中分配内存。如果您愿意,您可以mprotect使用这些页面,并确保分配器本身(将其所有数据结构保存在其他地方)或任何其他内存池不会触及它们。如果您使用MVT池类,您还可以利用内联无锁分配支持 Linux、Mac OS X 和 Windows

免责声明:我是 MPS 的架构师。

于 2013-06-03T20:31:02.747 回答