2009-04-07 105 views
23

什麼限制了內存映射文件的大小?我知道它不能大於未分配地址空間的最大連續塊,並且應該有足夠的可用磁盤空間。但是還有其他限制嗎?內存映射文件有多大?

+0

平臺? Windows還是Linux? – 2009-04-07 16:08:18

回答

24

你太保守了:內存映射文件可能大於地址空間。內存映射文件的視圖受操作系統內存限制的限制,但這只是您一次查看的文件的一部分。 (我想技術上你可以同時映射文件的不連續部分的多個視圖,所以除了開銷和頁面長度限制之外,它只是你查看的總字節數,這會造成限制。 [0〜1024]和字節[2 至2 + 1024]具有兩個單獨的視圖。)

在MS Windows中,看看MapViewOfFile功能。它實際上需要64位文件偏移量和32位長度。

+0

是的,我應該說「觀點」。我需要一次訪問整個文件,而不需要重新創建mmapp()。 – user88185 2009-04-07 16:38:31

+0

MapViewOfFile在64位機器上需要64位長度 – springy76 2015-07-22 10:32:11

1

應該沒有其他限制。這些不夠嗎? ;-)

+0

在64位操作系統上,這些限制似乎相當寬鬆...... – user88185 2009-04-07 16:36:11

1

在Windows環境下:「文件視圖的大小被限制在未保留的虛擬存儲器中的最大可用的連續塊這是至多2 GB減去虛擬存儲器已經由處理保留。」

MDSN

我不確定關於LINUX/OSX /無論其他,但它也可能與地址空間有關。

+1

只是爲了闡明,這是文件視圖的大小,而不是文件本身的大小。 – 2009-04-07 16:14:09

+5

「2 GB減去已被進程保留的虛擬內存」在32位機器上?它在64位盒子上有什麼不同? – user88185 2009-04-07 16:35:15

0

在linux上使用FUSE你也可以創建一個內存擴展到磁盤的文件系統。我不確定這是否符合內存映射的規定,並且區分會變得模糊。

9

這已經使用Win32下內存映射文件時,根據我的經驗:

如果你的地圖將整個文件成一個網段,一般在各地的水龍頭出來750 MB,因爲它無法找到更大的連續內存塊。如果你把它分成更小的部分,比如說每個100MB,你可以獲得大約1500MB-1800MB,這取決於還有哪些運行。

如果您使用/3g switch,您可以獲得2GB以上至2700MB左右的性能,但操作系統性能會受到影響。

我不確定64位,我從來沒有嘗試過,但我認爲最大文件大小,然後限制只有物理內存的數量。