windows API共享内存同时使用PAGE_NOCACHE与 PAGE_READWRITE 读写示例
时间: 2024-10-26 16:17:17 浏览: 32
内存共享c#版.rar_C# 内存共享_c# 共享内存_c#内存共享_共享内存_内存使用
Windows API中的共享内存可以使用`CreateFileMapping`函数创建,结合`MapViewOfFile`映射文件到进程地址空间。当需要同时使用`PAGE_NOCACHE`(无缓存)和`PAGE_READWRITE`(读写权限)时,通常是在数据访问速度非常关键且不需要持久化的情况下。下面是一个简化的示例:
```c++
#include <windows.h>
// 创建共享内存
DWORD dwDesiredAccess = FILE_MAP_ALL_ACCESS;
LPCTSTR lpFileName = NULL; // 使用匿名映射,传NULL
LPVOID lpBaseAddress = NULL;
size_t dwSize = YOUR_SHARED_MEMORY_SIZE;
HANDLE hMapFile = CreateFileMapping(INVALID_HANDLE_VALUE, &dwDesiredAccess, PAGE_NOCACHE | PAGE_READWRITE, 0, dwSize, lpFileName);
if (hMapFile == NULL) {
// 处理错误...
}
// 映射文件到进程地址空间
LPVOID lpView = MapViewOfFile(hMapFile, FILE_MAP_WRITE | FILE_MAP_READ, 0, 0, 0);
if (lpView == NULL) {
// 处理错误...
}
try {
// 在这个地址空间上进行读写操作
// 示例:将数值写入
int valueToWrite = 42;
memcpy(lpView, &valueToWrite, sizeof(int));
// 示例:从地址读取并显示
int readValue;
memcpy(&readValue, lpView, sizeof(int));
printf("Read value: %d\n", readValue);
} finally {
// 记得在完成后解除映射
UnmapViewOfFile(lpView);
CloseHandle(hMapFile);
}
```
阅读全文