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

64位Windows下numpy.memmap报内存不足但内存充足的原因排查

关于numpy.memmap()在Windows下抛出WinError 8的原因分析

咱们先拆解一下你遇到的问题:明明Python进程只显示占用50MB内存,却触发了「内存资源不足」的错误,核心问题出在代码里的**.tolist()调用**,结合Windows的内存机制,具体原因如下:

  • memmap的懒加载特性被.tolist()彻底打破:
    numpy.memmap本身是「内存映射文件」的封装,它不会一开始就把整个文件内容加载到内存,而是按需读取数据。但你调用了.tolist(),这个方法会强制把整个映射数组的所有元素转换成Python原生列表对象——注意,每个uint8类型的原始元素(仅占1字节)在Python里会变成一个完整的int对象,在64位Windows上,单个Python int对象大概占用28字节左右,内存开销瞬间膨胀几十倍。如果你的arraysize很大(比如几个GB量级),需要的内存会远超物理内存,Windows会试图用分页文件补充,但如果分页文件容量不足,就会直接抛出WinError 8。而Python进程的内存统计可能还没来得及更新到实际需要的峰值,所以你看到的只有50MB。

  • Windows虚拟地址空间的连续块限制(次要因素):
    64位Windows进程理论上有超大的虚拟地址空间,但如果你的映射文件尺寸过大,加上其他进程占用的资源,可能会出现无法分配足够连续虚拟地址块的情况,这也会触发类似的资源不足错误。

举个直观的例子:如果你的arraysize是1GB(102410241024个uint8元素),转换成Python列表后需要的内存大概是28GB左右,这远远超过普通机器的物理内存,一旦分页文件顶不住,就会直接报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 06:45:15