【问题标题】:Performant malloc implementation for executable code [closed]可执行代码的高性能 malloc 实现 [关闭]
【发布时间】:2019-01-10 03:02:58
【问题描述】:

我正在动态生成大量可执行机器代码的小片段,所有这些片段的大小和生命周期都无法预测。目前我正在使用一个简单的可执行文件mmap 预分配区域,但这只是临时的,因为最终内存耗尽。我没有实现任何内存回收机制,我也不想:这是一个难题(难以调试错误、碎片、多线程等)。

我需要的是一个实现malloc/free 协议但启用了可执行位的库。

是否有任何malloc 实现提供此选项(可以是编译时标志)?

更多细节回答 cmets:

  • 我当前的平台是 x86_64 上的 Linux,但欢迎支持 Windows 和 ARM 32/64(但不是必须的)。
  • 内存永远不会与不同的进程共享,但分配器必须支持多线程,并且如果可能的话,在这种情况下可扩展。

【问题讨论】:

标签: c linux memory-management malloc x86-64


【解决方案1】:

最简单的方法是使用池(竞技场)分配器。例如这个:https://github.com/philip-wernersbach/memory-pool-allocator。该实现在初始化期间调用一次malloc(),但在大多数系统上,如果您调用足够大的malloc(),它将使用mmap()。因此,您可以修改此库以调用 mprotect() 或类似方法以使页面可执行,甚至可以直接将 malloc() 调用替换为 mmap()(因为 malloc() 调用 mmap() 的阈值是可配置的,所以你可能不想依赖它)。

【讨论】:

    猜你喜欢
    • 2010-10-07
    • 2021-03-27
    • 2011-11-23
    • 2021-03-20
    • 2018-01-20
    • 2021-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多