Windows 内存管理(共享段,内存映射文件,写时复制)

内存管理:背景知识:虚拟地址空间:每个进程都有自己的虚拟地址空间,对于32位的进程来说空间大小为4GB,由于虚拟地址空间的存在,一个进程中的线程是看不到其他线程的内存的。虚拟地址空间主要包含了四部分内容,其中主要的是用户模式分区和内核模式分区。用户模式分区:自己写的程序,数据,加载的动态库等都加载到这个地方。内核模式分区:线程调度,内存管理等,该部分是不可以被访
摘要由CSDN通过智能技术生成

内存管理:

背景知识:

  1. 虚拟地址空间:

每个进程都有自己的虚拟地址空间,对于32位的进程来说空间大小为4GB,由于虚拟地址空间的存在,一个进程中的线程是看不到其他线程的内存的。虚拟地址空间主要包含了四部分内容,其中主要的是用户模式分区和内核模式分区。
用户模式分区:自己写的程序,数据,加载的动态库等都加载到这个地方。
内核模式分区:线程调度,内存管理等,该部分是不可以被访问的。

       2.  物理存储器:

虚拟地址空间并不是物理存储器,这个地址空间只不过是内存地址空间,为了能够正常的读/写数据,还需要将物理存储器分配或者映射到相应的地址空间上。
当然虚拟地址空间要大的多,这个地址空间中的大部分是闲置的或者尚未分配的。为了使用这部分地址空间可以如下操作。
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是一个简单的文件映射内存读写文件的代码示例: ```c++ #include <iostream> #include <fstream> #include <windows.h> using namespace std; int main() { // 打开文件 HANDLE hFile = CreateFile("test.txt", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); if (hFile == INVALID_HANDLE_VALUE) { cout << "Failed to open file" << endl; return 1; } // 创建文件映射 HANDLE hMapFile = CreateFileMapping(hFile, NULL, PAGE_READWRITE, 0, 0, NULL); if (hMapFile == NULL) { cout << "Failed to create file mapping" << endl; CloseHandle(hFile); return 1; } // 映射文件到内存 LPVOID lpMapAddress = MapViewOfFile(hMapFile, FILE_MAP_ALL_ACCESS, 0, 0, 0); if (lpMapAddress == NULL) { cout << "Failed to map view of file" << endl; CloseHandle(hMapFile); CloseHandle(hFile); return 1; } // 读写文件内容 char* pData = (char*)lpMapAddress; strcpy_s(pData, 20, "Hello, World!"); cout << "Write data to file: " << pData << endl; // 解除映射,关闭文件文件映射句柄 UnmapViewOfFile(lpMapAddress); CloseHandle(hMapFile); CloseHandle(hFile); return 0; } ``` 这代码包括了打开文件、创建文件映射映射文件到内存、读写文件内容、解除映射、关闭文件文件映射句柄等步骤。其中,我们使用 `CreateFile` 函数打开文件,使用 `CreateFileMapping` 函数创建文件映射,使用 `MapViewOfFile` 函数将文件映射到内存,使用 `UnmapViewOfFile` 函数解除映射。我们还使用了 `strcpy_s` 函数将字符串写入文件

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值