windows 将PAGE_NOCACHE创建一个进程的私有内存分配给CreateFileMapping
时间: 2024-10-27 10:08:53 浏览: 11
shm.zip_Windows/Linux_windows/linux 内存共享
在Windows中,`PAGE_NOCACHE`通常用于文件映射而不是直接创建进程的私有内存。如果你想要创建一个文件映射,并告诉系统不要为该映射的页面保留高速缓存,可以结合`CREATE_MAP_NOBUFFER`标志一起使用`CreateFileMapping`函数。下面是基本的示例:
```cpp
#include <windows.h>
#include <tlhelp32.h> // 引入进程处理相关头文件
FILE_MAP_INFORMATION fileMapInfo;
// 设置PAGE_NOCACHE
fileMapInfo.MapFlags = FILE_MAP_COPY | FILE_MAP_PRIVATE; // 添加PAGE_NOCACHE
fileMapInfo.ViewSize = sizeof(MyData); // 替换成你需要映射的实际数据大小
fileMapInfo.FileOffset = 0; // 文件开始映射的位置
fileMapInfo.ByteCount = fileMapInfo.ViewSize;
// 创建文件映射
HANDLE fileMappingHandle = CreateFileMapping(
hFile, // 打开的文件句柄
NULL, // 没有必要指定SECURITY_ATTRIBUTES
FILE_MAP_READ | FILE_MAP_WRITE | FILE_MAP_EXECUTE | fileMapInfo.MapFlags, // 包含PAGE_NOCACHE
0, // 高度
fileMapInfo.ByteCount,
NULL // 映射的名字,这里通常是文件名加上".mapping"
);
if (fileMappingHandle == INVALID_HANDLE_VALUE) {
// 处理错误
return;
}
// 现在你可以通过MapViewOfFile获取映射的虚拟地址
PVOID mappedView = MapViewOfFile(fileMappingHandle, FILE_MAP_ALL_ACCESS, 0, 0, 0);
// 使用完毕后记得调用UnmapViewOfFile释放映射
UnmapViewOfFile(mappedView);
CloseHandle(fileMappingHandle);
```
在这个例子中,我们创建了一个文件映射,其中包含`PAGE_NOCACHE`标志,这意味着系统不会为映射的内容保留高速缓存。
阅读全文