如果我mmap() 一些PRIVATE 和ANONYMOUS 页面然后使用mremap() 扩展它们,新空间是否也被初始化为零?
我已经尝试阅读 linux 源代码中的 mremap (mm/mremap.c) 代码,但它需要一些我目前不具备的特定领域知识 (vma_###东西)。甚至不确定那是正确的地方...
但是,根据我收集到的信息,我认为 mremap()ed 内存会被清除,这是正确的吗?
分配是这样完成的
list = mmap(NULL, newSize, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1, 0)
然后像这样重新映射
newList = mremap(list, oldSize, newSize, MREMAP_MAYMOVE)
啊,最后,这是一个 Linux 特定问题,运行最新的内核 (>=2.6.28) 和 libc (>=2.11.1)
最佳答案
匿名页面是通用零页面的写时复制映射。它们一直是(在提供匿名映射的每个系统上,而不仅仅是 Linux)并且将永远是。当 mremap
(或 brk
)扩展匿名映射时,您会得到新的匿名(零)页面。无需自行初始化。
关于c - mremap "initialize"内存是否增长?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7978831/