如何将malloc约束到特定的内存区域

时间:2013-05-27 17:10:13

标签: c memory-management malloc mprotect

有什么:

  • 分配/解除分配/重新分配许多可变大小的对象而不会出现碎片(基本上是malloc所做的)和
  • 跟踪用于这些分配的所有内存页面,以便我可以
  • 稍后mprotect所有这些页面都将其设为只读
  • 最好没有任何锁定 - 所有访问都是单线程的
  • 适用于Linux和OS X,最好是在Windows上使用相同的功能吗?

我无法想到使用标准内存分配函数的方法。想到的唯一策略是使用自定义内存池而不是malloc。所以我的问题是:有没有一种方法可以在没有自定义malloc或(如果没有)建议的情况下执行此操作?

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

1 个答案:

答案 0 :(得分:1)

开源Memory Pool System将在操作系统页面大小的块中分配内存,MPS本身不会触及这些块。如果您愿意,可以mprotect这些页面,并确保分配器本身(将其所有数据结构保留在别处)或任何其他内存池不会触及它们。如果您使用MVT池类,您也可以利用inline lockless allocationLinux, Mac OS X, and Windows are supported

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