CreateFileMapping/MapViewOfFile返回的共享内存数组是否被初始化为零?

6

我很好奇,如果我在Windows平台上创建一个共享内存数组,应该这样做:

HANDLE hFile = CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE | SEC_COMMIT, 0, 1024 * 4, _T("mySharedMemName"));
if(hFile)
{
    VOID* pData = MapViewOfFile(hFile, FILE_MAP_ALL_ACCESS, 0, 0, 1024 * 4);

    //Is 'pData' array initialized with zeros the first time the 'hFile' is used?
}

第一次调用此代码片段时,内存数组是否初始化为0?如果没有,如何进行零初始化?


1
大多数操作系统会将新映射到进程地址空间中的所有页面进行零填充(除非这些页面是共享的或由磁盘文件或外围设备支持)。从安全角度考虑,不这样做是不明智的。 - Hristo Iliev
1个回答

8

根据文档,由操作系统分页文件支持的文件映射对象中页面的初始内容为0(零)。


谢谢。显然我错过了它。很好,我们不必清除它。 - ahmd0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接