我读 Windows通过c/c++.我只是想知道一个很大的文件可以映射到存储器。

当我们执行一个应用程序,PE文件是映射它们的进程的地址(用户分区)。

在32位窗,一个大型的文件(大于2GB)可以装载到用户的分区?或者它就是失败了?
如果这是可能的,并呼文件帮助所载?

有帮助吗?

解决方案

你将不能够这样做的32位的窗口。任何运行的程序,希望这样做将有至少3个模块装:

  • ntdll.dll
  • kernel32.dll
  • yourApplication.exe

yourApplication.exe 将通过默认的负载0x00400000.exe虽然可以改变这一地址。ntdll.dll 和kernel32.dll 会载在其通常的地址载在高0x7Dxx0000范围。

在Vista和后面操作系统的上述段落是不是真的作负荷的地址都是随机的,但dll将仍然存在他们自己的地址在第2GB的存储器。

因此你不会有足够连续的空间到任何地方载入你的超大PE文件,甚至如果你开始窗/3GB开关。

如果你想要一个好的想法的各种Dll将负荷,使用 VMValidator (免费)以想象的地址空间应用。虚拟存储图显示了一个图形表示(1素每4Kb页)的存储器。该网页和第景显示你的实际虚拟存储状况的每一个存储页和存款。

64位Windows,你可以载2GB64位PE文件-有当然应该enopugh连续的空间,让它加载存储器。至于它是否会随后的工作我不能说,你会对它进行测试。

其他提示

没有,你不能 - 你会耗尽你的VA空间,无论分页文件设置

我不认为整个文件被映射,只到可执行图像的大小(如在PE头中列出)。因此,一个自解压存档> 2GB应该是可能的。该代码将不得不使用标准文件的I / O从文件的后半部分提取其数据,则PE图像的端部以下。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top