题
什么限制了存储器映射文件的大小?我知道这不能比的未分配的地址空间中的最大的连续块大,而且应该有足够的可用磁盘空间。但有其他限制?
解决方案
您太保守:内存映射文件可以比地址空间较大。在视图中的内存映射文件的由操作系统内存约束的限制,但是这就是你要找的一次文件的唯一部分。 (我猜技术上你可以在一次映射文件的不连续部分的多个视图,所以除了开销,页面长度的限制,它只能是你正在寻找的是总字节#带来了限制。你可以看看字节[0〜1024]和字节[2 40 2 40 + 1024]具有两个单独的视图。)
在MS Windows中,看看 MapViewOfFile 一>功能。它有效地需要一个64位的文件偏移量和一个32位的长度。
其他提示
本使用Win32下内存映射文件时,我的经验:
如果您的地图整个文件到一个段中,它通常在约750 MB水龙头出来,因为它不能找到的存储器的更大的连续块中。如果你把它分解成更小的片段,说每个100MB,让您可以1500MB,1800MB取决于什么其他正在运行。
如果您使用 / 3G切换你可以得到超过2GB高达约2700MB但OS性能惩罚。
我不知道有关64位,我从来没有尝试过,但我相信那么最大文件大小仅受你的物理内存数量的限制。
应该没有其它限制。难道这些还不够吗? ; - )
在Windows:“文件视图的大小被限制在未保留的虚拟存储器中的最大可用的连续块这是至多2 GB减去已经由过程保留的虚拟内存。”
从 MDSN
我不知道LINUX / OSX /任何其他人,但它可能也涉及到地址空间。
使用 FUSE 在Linux上,你也可以做一个内存中的文件系统延伸到磁盘上的需求。我不知道有资格作为存储器映射,并区分得到那种模糊。
是,是有限制的内存映射文件。最令人吃惊的是:
内存映射文件不能大于2GB在32位的系统。
当一个MEMMAP导致创建或延伸超过文件系统中的其当前大小的文件时,新的部分的内容是不确定的。与POSIX文件系统语义的系统中,扩展部分将充满零个字节。
即使在我的64位,32GB RAM系统,我收到以下错误,如果我尝试在一个大的numpy的内存映射文件的读取,而不是使用字节偏移拍摄若干部分:
Overflow Error: memory mapped size must be positive
大数据集是真正与工作有疼痛感。
Wikipedia条目: http://en.wikipedia.org/wiki/Memory-mapped_file