Debian 64位。
昨天,我对mmap创建非常大文件的能力印象深刻。 它是选项MAP_SHARED。
事实上,我在3Gb ram和120Gb硬盘上制作了一个空的8Tb文件。使用LARGEFILE打开文件并使用lseek64。
我知道最后,绝对最大值是硬盘可以物理获取的数据量,无论如何。
这对我来说绝对没用,但是,我可以创建多少个文件,只是为了好玩?我尝试了10,这没关系。不是有限制吗? ulimit显示:无限制。来吧,没有什么是无限的。
如果我只将一个字符放在硬盘上的每个mmap文件中,那么最大值
(可用磁盘空间/(指向文件描述符大小* 4Kb的指针))
sizeof char == 1,以及4Kb,磁盘上文件的实际大小?
由于
答案 0 :(得分:2)
很可能这些文件是在其中创建的。您可以在没有mmap
的情况下执行此操作。只需打开一个文件ftruncate
即可达到您想要的大小,操作系统很可能会允许您这样做。诀窍是操作系统知道你没有写入文件的哪些部分,并且实际上不会为它分配磁盘块。读取文件的这些部分将只返回零。除非你在一个不支持它的文件系统上。但是unix上的大多数文件系统都可以。
要实际为磁盘上的所有块分配文件,您必须将一个字符写入每个块(或一组块,或者文件系统在内部执行,这是特定于操作系统的)。您可以使用fstat
和实验来确定块大小。