windows API共享内存使用PAGE_NOCACHE的读写示例
时间: 2024-10-26 21:17:00 浏览: 10
内存共享c#版.rar_C# 内存共享_c# 共享内存_c#内存共享_共享内存_内存使用
Windows API中的共享内存通常使用`CreateFileMapping`函数来创建,而`MapViewOfFile`用于映射文件到进程地址空间。当你需要指定缓存策略时,可以使用`MapViewOfFileEx`函数,并设置`FILE_MAP_WRITE`和`FILE_MAP_READ`标志,以及`PAGE_NOCACHE`页面属性。
以下是一个简单的示例,假设我们有一个句柄`hMap`代表已创建的共享内存:
```cpp
#include <windows.h>
#include <stdio.h>
// 创建共享内存并分配空间
HANDLE hMap = CreateFileMapping(INVALID_HANDLE_VALUE, NULL,
PAGE_NOCACHE | SEC_COMMIT, size_in_bytes, 0, L"SharedMemory");
if (hMap == INVALID_HANDLE_VALUE) {
printf("Failed to create shared memory.\n");
return;
}
// 映射内存到当前进程
LPVOID lpBaseAddress = MapViewOfFile(hMap, FILE_MAP_READ | FILE_MAP_WRITE,
0, 0, 0);
if (lpBaseAddress == NULL) {
CloseHandle(hMap);
printf("Failed to map view of file.\n");
return;
}
// 示例读写操作
char* data = static_cast<char*>(lpBaseAddress);
data[0] = 'H';
data[1] = 'e';
printf("Wrote to shared memory at address: %p\n", data);
// 清理
UnmapViewOfFile(lpBaseAddress);
CloseHandle(hMap);
printf("Closed shared memory.\n");
阅读全文