代码之家  ›  专栏  ›  技术社区  ›  Zan Lynx

使Windows允许我映射1 GB的虚拟内存

  •  0
  • Zan Lynx  · 技术社区  · 14 年前

    我正在使用createfilemapping和mapviewoffile尝试映射一个接近1 GB的文件。我在扩展文件时遇到一些问题,所以我想尝试使用1 GB大小的CreateFileMapping。这比实际文件大,但在较小的文件上效果很好。

    看来我能 几乎 到1 GB的映射,但不是全部映射。1 GB的内存不足约16MB。

    我正在使用SysInternals vmmap程序查看我的测试程序中各部分的布局。我觉得很奇怪。vmmap显示在我的映射之后有空闲的虚拟内存空间!

    为什么我不能用它?

    看起来有点像这样:
    0x3F6E0000<-此件分配给我的测试程序
    0x406e0000<-这件是免费的,大小接近800 MB!把它给我!

    内存区超过0x40000000有魔力吗?如果是这样,那为什么它让我用掉了0x6e0000?

    顺便说一下,测试程序正在64个单独的段中使用mapviewoffile,这就是为什么0x3F6e0000块没有那么大。

    1 回复  |  直到 14 年前
        1
  •  1
  •   Ana Betts    14 年前

    这是一个很长的镜头,但可能是一些小的东西被映射到了0x40000000附近(可能是一个dll?)因为内核找不到 邻接的 VA空间就是你想要的大小(也就是说,你有足够的空间,但是它被分割了),它失败了。如果你想在巨大的文件中进行映射,在 modern architecture -当你减去所有的dll和heap之后,你在Windows上只能得到1.5GB的保证VA空间用于用户模式进程。