有什么方法可以禁用jemalloc中的内存清除吗?

时间:2020-04-15 13:02:16

标签: c++ jemalloc

我们正在实现一个消耗内存的长时间运行的服务器,该服务器在内部使用jemalloc分配/释放内存。服务器连续地逐批处理数据。对于每个批处理,它都会通过malloc()分配内存并处理批处理中的数据,然后释放内存(通过free())。

问题是,当有新数据进入时,它必须分配新的内存进行处理,这会导致很多页面错误,因为从操作系统分配的内存页面以前是在以前的free()上返回的(或者通过清除madvise)

是否有任何方法可以保留(在进程地址空间中)先前释放的内存,以便下次分配可以重用它们?

请注意,由于每个分配/取消分配的大小都不固定,因此此处不适合使用固定大小的内存池。这里需要一些通用分配器,例如jemalloc。

jemalloc中是否有配置,以便所有分配和释放的内存都保留在进程地址空间中,以便以后重用?可以在服务器启动时分配一个大块(例如64GB)并在这单个块内处理分配/重新分配/碎片/碎片整理。

0 个答案:

没有答案