You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Linux下近无限增长匿名mmap实现报错问题求解

问题原因

你fd==-1分支的mmap调用参数缺失了必填标记:Linux 下使用MAP_ANONYMOUS时必须同时指定MAP_PRIVATE或者MAP_SHARED,你当前只传了MAP_ANONYMOUS|MAP_FIXED,不符合内核要求,因此调用失败返回(void*)-1。

修改方案

把else分支的mmap参数补加MAP_PRIVATE即可,测试阶段不需要持久化、不需要共享映射,用私有匿名映射完全符合需求:

else {              
  // stp is 1 or 2 and PAGE is 4k ...                                                                                                                                                                                 
  filemap = mmap(reserve, PAGE*stp, PROT_READ|PROT_WRITE, MAP_ANONYMOUS|MAP_FIXED|MAP_PRIVATE, -1, 0);                    
}

这里主动把fd参数硬写为-1更严谨,避免上层传错非-1的值到这个分支。

适配需求的补充说明

  • 你最开始预留的1TB PROT_NONE匿名映射仅占用虚拟地址空间,不会分配物理内存,完全符合你不浪费物理内存、不和其他内存区域冲突的要求
  • 后续不管是绑定文件扩容还是测试阶段的匿名扩容,都可以直接在这个预留的地址区间内,用MAP_FIXED覆盖映射对应区间即可,只有真正访问映射后的地址时才会分配物理页/加载文件内容,不需要提前清零整个1TB空间
  • 多个miniheap可以各自分配在这个1TB空间的不同偏移位置,天然满足你分散在虚拟内存空间的要求

内容的提问来源于stack exchange,提问作者Adrian May

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 04:39:03