标签:malloc x86-64 c-3 memory-management linux
我正在动态生成大量的可执行机器代码小片段,所有这些片段的大小和生存期都无法预测.目前,我正在使用一个天真的可执行文件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
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。