使用JIT进行有效的内存管理?

时间:2018-11-18 19:01:54

标签: c memory-management malloc jit memory-efficient

我正在编写一个执行JIT的程序,而我目前正在设置可执行内存,如下所示:

void *mem = mmap(NULL, len, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0);
// write the JIT output to mem
mprotect(mem, len, PROT_READ|PROT_EXEC);

然后我像这样清理它:

munmap(mem, len);

这是相当低效的,因为我为JIT的所有内容分配了整个页面(4KB),其中大多数只需要几个字节。 (请注意,我关心的更多是页面映射的数量,可能与vm.max_map_count无关,而不仅仅是使用的RAM原始数量。)对于常规的内存分配,malloc通过以下方式来解决此问题:包装(s)brkmmap,并跟踪使用页面的哪些部分。我显然不能只使用malloc,因为它分配了不可执行的内存。分配可执行内存时是否有一种简单的方法来获得类似的行为,还是我必须使用malloc的自定义替代方法来做到这一点?

0 个答案:

没有答案
相关问题