可执行代码的高性能malloc实现
作者:互联网
我正在动态生成大量的可执行机器代码小片段,所有这些片段的大小和生存期都无法预测.目前,我正在使用一个天真的可执行文件mmap预分配区域,但是由于最终的内存耗尽,这只是临时的.我没有实现任何内存回收机制,而且我也不想这样做:这是一个很难解决的问题(难以调试错误,碎片,多线程等).
我需要一个实现malloc / free协议但启用了可执行位的库.
是否有任何提供此选项的malloc实现(可以是编译时标志)?
回答评论的更多详细信息:
>我当前的平台是x86_64上的Linux,但是将欢迎Windows和ARM 32/64支持(但不是必须的).
>内存永远不会与其他进程共享,但是在这种情况下,分配器必须支持多线程,并且在可能的情况下可以扩展.
解决方法:
最简单的方法是使用池(区域)分配器.例如:https://github.com/philip-wernersbach/memory-pool-allocator.该实现在初始化期间调用一次malloc(),但是在大多数系统上,如果调用足够大的malloc(),它将使用mmap().因此,您可以修改该库以调用mprotect()或类似方法以使页面可执行,甚至可以直接用mmap()替换malloc()调用(因为malloc()调用mmap()的阈值是可配置的,所以您可能不想依靠它).
标签:malloc,x86-64,c-3,memory-management,linux 来源: https://codeday.me/bug/20191108/2009611.html