我正在动态生成成吨的可执行机器代码小片段,所有这些片段的大小和生存期都无法预测。当前,我使用的是天真的可执行文件mmap
的预分配区域,但这只是临时的,因为最终会耗尽内存。我没有实现任何内存回收机制,而且我也不想这样做:这是一个难题(难以调试错误,碎片,多线程等)。
我需要一个实现malloc
/ free
协议但启用了可执行位的库。
是否有任何malloc
实现提供此选项(可以是编译时标志)?
回答评论的更多详细信息:
答案 0 :(得分:3)
最简单的方法是使用池(区域)分配器。例如:https://github.com/philip-wernersbach/memory-pool-allocator。该实现在初始化期间调用一次malloc()
,但是在大多数系统上,如果您调用malloc()
的大小足够大,它将使用mmap()
。因此,您可以修改该库以调用mprotect()
或类似方法以使页面可执行,甚至可以将malloc()
的调用直接替换为mmap()
(因为malloc()
的阈值调用mmap()
是可配置的,因此您可能不想依赖它。