博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
在Win32中管理虚拟内存——举例
阅读量:5860 次
发布时间:2019-06-19

本文共 2368 字,大约阅读时间需要 7 分钟。

以下两个编程例子: 整块方式使用虚拟内存页 分块方式使用虚拟内存页 (一)整块方式,分以下两步  (1)预留+提交  (2)释放#include 
#include
int main(int argc, char*argv[]){ LPVOID lpvBase; // base address of the test memory int i; for(i=0; ; i++) { lpvBase = VirtualAlloc( // (1) NULL, // system selects address 102400, // size of allocation MEM_RESERVE|MEM_COMMIT, // allocate reserved and committed pages PAGE_READWRITE); // both read and write if (NULL == lpvBase ) { printf("call VirtualAlloc fail!\n"); exit(1); } else { printf("call VirtualAlloc LastError=%d\n", GetLastError()); strcpy((char*)lpvBase, "I am a boy!"); VirtualFree(lpvBase, 0, MEM_RELEASE);// (2) printf("call VirtualFree LastError=%d\n", GetLastError()); } Sleep(0); }} 其中,VirtualFree(lpvBase, 0, MEM_RELEASE); 等价于    VirtualFree(lpvBase, 0, MEM_DECOMMIT);    VirtualFree(lpvBase, 0, MEM_RELEASE); 但绝不等价于    VirtualFree(lpvBase, 0, MEM_DECOMMIT\|MEM_RELEASE); 也就是说,*MEM_DECOMMIT\|MEM_RELEASE组合方式是不允许的,造成虚拟内存的泄露。(二)分段方式 (1)预留 (2)提交子页 (3)解除提交 (4)释放#include
#include
int main(int argc, char*argv[]){ LPVOID lpvBase, lpPage3; // base address of the test memory int i; for(i=0; ; i++) { lpvBase = VirtualAlloc( // (1) NULL, // system selects address 4096*8, // size of allocation MEM_RESERVE, // allocate reserved pages PAGE_READWRITE); // both read and write if (NULL == lpvBase ) { printf("call VirtualAlloc MEM_RESERVE fail!\n"); exit(1); } else { printf("call VirtualAlloc MEM_RESERVE, LastError=%d\n", GetLastError()); lpPage3 = VirtualAlloc( //(2) (char*)lpvBase+(4096*2), // user selects address 4096, // size of allocation MEM_COMMIT, // allocate committed pages PAGE_READWRITE); // both read and write if (NULL == lpPage3 ) { printf("call VirtualAlloc MEM_COMMIT fail!\n"); exit(1); } printf("call VirtualAlloc MEM_COMMIT, LastError=%d\n", GetLastError()); strcpy((char*)lpPage3, "I am a boy!"); VirtualFree((char*)lpvBase+(4096*2), 4096, MEM_DECOMMIT); //(3) printf("call VirtualFree MEM_DECOMMIT, LastError=%d\n", GetLastError()); VirtualFree(lpvBase, 0, MEM_RELEASE); //(4) printf("call VirtualFree MEM_RELEASE, LastError=%d\n", GetLastError()); } Sleep(0); }}

转载于:https://www.cnblogs.com/java201408/archive/2013/03/15/3900971.html

你可能感兴趣的文章
被神话的大数据——从大数据(big data)到深度数据(deep data)思维转变
查看>>
强制缓存和协商缓存有什么区别
查看>>
Python爬虫--- 1.4 正则表达式:re库
查看>>
Xcode 10 升级导致项目报错的常见问题
查看>>
我们来说一说TCP神奇的40ms
查看>>
[LeetCode] 97. Interleaving String
查看>>
微服务架构组件分析
查看>>
Mongodb数据的导出与导入
查看>>
在SAP UI中使用纯JavaScript显示产品主数据的3D模型视图
查看>>
python 设计模式-适配器模式
查看>>
vue_music:排行榜rank中top-list.vue中样式的实现:class
查看>>
修改校准申请遇到的问题
查看>>
第一天·浏览器内核及Web标准
查看>>
【DL-CV】浅谈GoogLeNet(咕咕net)
查看>>
【许晓笛】详解 EOS 的新共识机制 BFT-DPoS
查看>>
python大佬养成计划----win下对数据库的操作
查看>>
前端每日实战:125# 视频演示如何用纯 CSS 创作一个失落的人独自行走的动画...
查看>>
Nginx实践篇(4)- Nginx代理服务 - 正向代理和反向代理
查看>>
从0开发豆果美食小程序——项目搭建
查看>>
【译】WebSocket协议第二章——一致性要求(Conformance Requirements)
查看>>