c - mremap "initialize"内存是否增长?

标签 c linux mmap

如果我mmap() 一些PRIVATEANONYMOUS 页面然后使用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/

相关文章:

c - 有没有一种简洁的方法可以在 C 中创建位掩码?

ruby-on-rails - 如何使用 capistrano 进行部署

python - 在 python 中使用 mmap 函数需要的示例

c - 如何检测特定页面是否映射到内存中?

c - MATLAB mex - undefined symbol _max

c - 为什么会出错?我对 strtok() 有问题;这么长时间

c - 将数组引用到指针

linux - 为什么我必须输入 "\\\0"才能在zsh中创建一个字符串 "\0"?

linux - 了解操作系统引导加载 - 程序集

c - 在最近的 Linux 内核上测试 msync 使用的好方法是什么?