linux - mmap共享最大大小

时间:2014-09-11 08:43:39

标签: c linux mmap

上下文

Debian 64位。

昨天,我对mmap创建非常大文件的能力印象深刻。 它是选项MAP_SHARED。

事实上,我在3Gb ram和120Gb硬盘上制作了一个空的8Tb文件。使用LARGEFILE打开文件并使用lseek64。

我知道最后,绝对最大值是硬盘可以物理获取的数据量,无论如何。

问题

这对我来说绝对没用,但是,我可以创建多少个文件,只是为了好玩?我尝试了10,这没关系。不是有限制吗? ulimit显示:无限制。来吧,没有什么是无限的。

如果我只将一个字符放在硬盘上的每个mmap文件中,那么最大值

(可用磁盘空间/(指向文件描述符大小* 4Kb的指针))

sizeof char == 1,以及4Kb,磁盘上文件的实际大小?

由于

1 个答案:

答案 0 :(得分:2)

很可能这些文件是在其中创建的。您可以在没有mmap的情况下执行此操作。只需打开一个文件ftruncate即可达到您想要的大小,操作系统很可能会允许您这样做。诀窍是操作系统知道你没有写入文件的哪些部分,并且实际上不会为它分配磁盘块。读取文件的这些部分将只返回零。除非你在一个不支持它的文件系统上。但是unix上的大多数文件系统都可以。

要实际为磁盘上的所有块分配文件,您必须将一个字符写入每个块(或一组块,或者文件系统在内部执行,这是特定于操作系统的)。您可以使用fstat和实验来确定块大小。

相关问题