当进程请求内存并且操作系统向进程提供一些新页面时,内核应该初始化页面(例如,使用零),以避免显示另一个进程使用的可靠数据.当进程启动并接收一些内存时也是如此,例如堆栈段.
当我在Linux中执行以下代码时,结果是大部分已分配的内存确实为0,但堆栈底部大约3-4 kB(数组的最后一个元素,最高地址)包含随机数.
#include <cstdlib>
#include <iostream>
using namespace std;
int main()
{
int * a = (int*)alloca(sizeof(int)*2000000);
for(int i = 0; i< 2000000; ++i)
cout << a[i] << endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我只是问这个问题,因为我很好奇 Linux 内核是如何工作的。根据http://i-web.iu-tokyo.ac.jp/edu/training/ss/lecture/new-documents/Lectures/02-VirtualMemory/VirtualMemory.ppt Windows 在其页目录和页表中使用特殊条目命名自映射,以便能够从内核虚拟地址空间操作页目录/表内容。如果有人熟悉 Linux 内存管理,请告诉我 Linux 内核是否以类似或不同的方式处理这个问题。谢谢。