我正在使用 mmap 创建共享内存段,我想知道是否可以预先创建我可能在/dev/shm 中使用的所有段而不触发任何内存使用。我怀疑这可能是可能的原因是我知道大多数文件系统都有全零页面的概念,并且当您在执行任何写入之前最初增长文件时,可能会因为这些“而使文件实际上不会占用空间”孔页。但对于 tmpfs(/dev/shm 文件系统)来说是这样吗?只要不写入数据,我可以在/dev/shm 中疯狂创建大文件而不触发内存使用吗?
最佳答案
在 Linux 上,tmpfs
文件系统支持稀疏文件。仅调整文件大小不会分配内存(超出内部 tmpfs 数据结构)。就像支持稀疏文件(有漏洞的文件)的常规文件系统一样,您要么必须实际写入数据,要么使用 Fallocate 来分配后备存储。据我所知,从 Linux 2.6 开始就是这样。
关于c -/dev/shm中的文件用ftruncate增长但不写入时会占用内存吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58571685/