【发布时间】:2014-11-05 03:18:54
【问题描述】:
上下文
Debian 64 位。
昨天,mmap 创建非常大文件的能力给我留下了深刻的印象。 它与 MAP_SHARED 选项有关。
事实上,我在 3Gb 内存和 120Gb 硬盘上映射了一个空的 8Tb 文件。使用 LARGEFILE 打开文件并使用 lseek64。
我知道最后,绝对最大值是硬盘驱动器可以物理获取的数据量,无论如何。
问题
这对我来说绝对没用,但是,我可以创建多少这些文件,只是为了好玩?我尝试了 10 并且没问题。没有限制吗? ulimit 显示:无限制。来吧,没有什么是无限的。
如果我在硬盘上的每个 mmap 文件中只放一个 一个字符,那么最大值会是
(可用磁盘空间/(指向文件描述符大小*4Kb))
sizeof char == 1 和 4Kb,磁盘上文件的实际大小?
谢谢
【问题讨论】:
-
解释一下,保存文件的方式是目录节点有一个指向数据节点的指针。仅当数据节点实际包含数据时才分配数据节点。所以,一般来说,一个巨大的文件可以被映射,但直到一个节点需要包含数据时才会真正分配。