代码之家  ›  专栏  ›  技术社区  ›  Larry

linux-mmap SHARED最大大小

  •  1
  • Larry  · 技术社区  · 10 年前

    上下文

    Debian 64位。

    昨天,我对mmap创建一个 非常 大文件。 它具有MAP_SHARED选项。

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

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

    问题

    这对我来说绝对没有用,但是,我可以创建多少这些文件,只是为了好玩?我用10试了试,没问题。这不是有限制吗? ulimit显示:unlimited。拜托,没有什么是无限的。

    如果我把 一个字符 在硬盘上的每个mmap文件中,最大值是

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

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

    谢谢

    1 回复  |  直到 4 年前
        1
  •  2
  •   Art    10 年前

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

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