当前位置: 首页 > news >正文

windows C++ 虚拟内存的按需调拨

虚拟内存的按需调拨

windows C++ 虚拟内存的按需调拨

文章目录

  • 虚拟内存的按需调拨
  • 虚拟内存的按需调拨


虚拟内存的按需调拨

/*------------------------------------------------------------------------24-SEHAndMemory.cpp演示虚拟内存的按需调拨-----------------------------------------------------------------------*/
#include <windows.h>
#include <tchar.h>
#include <locale.h>#define PAGELIMIT 80
LPBYTE lpNxtPage;
DWORD dwPages = 0;
DWORD dwPageSize;//页面大小,一般为4KBINT PageFualtExceptionFilter(DWORD dwCode) {LPVOID lpvResult;//不是非法访问内存if (dwCode != EXCEPTION_ACCESS_VIOLATION) {//线程试图读写一个虚拟内存地址,但在这个地址它并不具备相应权限return EXCEPTION_EXECUTE_HANDLER;//执行except块的异常处理程序代码}//当超过指定的页面数时if (dwPages >= PAGELIMIT) {return EXCEPTION_EXECUTE_HANDLER;//执行except块的异常处理程序代码}//非法访问内存,则为预订的空间提交下一页物理存储器lpvResult = VirtualAlloc((LPVOID)lpNxtPage, dwPageSize, MEM_COMMIT, PAGE_READWRITE);if (lpvResult == NULL) {return EXCEPTION_EXECUTE_HANDLER;//执行except块的异常处理程序代码}//提交成功dwPages++;lpNxtPage += dwPageSize;_tprintf(_T("第%d页提交成功!\n"), dwPages);return EXCEPTION_CONTINUE_EXECUTION; //重新执行触发异常的那条CPU指令
}int main() {_tsetlocale(LC_ALL, _T("chs"));LPVOID lpvBase; LPTSTR lpPtr; BOOL bSuccess;SYSTEM_INFO sSysInfo;GetSystemInfo(&sSysInfo);dwPageSize = sSysInfo.dwPageSize;_tprintf(_T("CPU页面大小为%dKB.\n"), sSysInfo.dwPageSize / 1024);//预订存储器lpvBase = VirtualAlloc(NULL, PAGELIMIT*dwPageSize, MEM_RESERVE, PAGE_NOACCESS);lpPtr = (LPTSTR)(lpNxtPage = (LPBYTE)lpvBase);for (DWORD i = 0; i < PAGELIMIT*dwPageSize / sizeof(TCHAR); i++) {__try {lpPtr[i] = _T('a');//写入一个字节的数据}__except (PageFualtExceptionFilter(GetExceptionCode())) {_tprintf(_T("异常被处理\n"));//ExitProcess(GetLastError());}}bSuccess = VirtualFree(lpvBase, 0, MEM_RELEASE);_tprintf(_T("释放操作%s.\n"), bSuccess ? _T("成功") : _T("失败"));_tsystem(_T("PAUSE"));return 0;
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Typora教程
  • 基于图谱的记忆存储 - mem0 graph memory + neo4j
  • FreeRTOS学习笔记(五)任务进阶篇
  • <Rust>egui学习之小部件(九):如何在窗口中添加下拉列表combobox部件?
  • 同城搭子怎么找?靠谱找搭子平台排行榜前十名测评
  • Typora调整图片大小:两种方式zoom或width/height
  • [数据集][目标检测]街头摊贩识别检测数据集VOC+YOLO格式758张1类别
  • 【干货分享】央企国企的群面、半结构面试复习方法和经验总结
  • Java网络编程入门
  • 【生日视频制作】保时捷车主提车交车仪式感AE模板修改文字软件生成器教程特效素材【AE模板】
  • 创建Hive表后,查看表结构发现中文注释乱码
  • 【spring】RuleOptions RecommendCtx
  • 面试—Linux
  • dpdk——数据平面开发套件
  • 【开源免费】基于SpringBoot+Vue.J大学生租房平台(JAVA毕业设计)
  • [ JavaScript ] 数据结构与算法 —— 链表
  • 【Linux系统编程】快速查找errno错误码信息
  • 【mysql】环境安装、服务启动、密码设置
  • 30秒的PHP代码片段(1)数组 - Array
  • Invalidate和postInvalidate的区别
  • Java编程基础24——递归练习
  • LeetCode刷题——29. Divide Two Integers(Part 1靠自己)
  • Mysql5.6主从复制
  • nodejs调试方法
  • nodejs实现webservice问题总结
  • React-flux杂记
  • Spring框架之我见(三)——IOC、AOP
  • 快速构建spring-cloud+sleuth+rabbit+ zipkin+es+kibana+grafana日志跟踪平台
  • 理清楚Vue的结构
  • 微信端页面使用-webkit-box和绝对定位时,元素上移的问题
  • 微信小程序设置上一页数据
  • 中国人寿如何基于容器搭建金融PaaS云平台
  • 深度学习之轻量级神经网络在TWS蓝牙音频处理器上的部署
  • Android开发者必备:推荐一款助力开发的开源APP
  • # 安徽锐锋科技IDMS系统简介
  • #define,static,const,三种常量的区别
  • #include到底该写在哪
  • (14)Hive调优——合并小文件
  • (1综述)从零开始的嵌入式图像图像处理(PI+QT+OpenCV)实战演练
  • (20050108)又读《平凡的世界》
  • (BFS)hdoj2377-Bus Pass
  • (DenseNet)Densely Connected Convolutional Networks--Gao Huang
  • (八)Spring源码解析:Spring MVC
  • (笔记)Kotlin——Android封装ViewBinding之二 优化
  • (笔记)M1使用hombrew安装qemu
  • (第8天)保姆级 PL/SQL Developer 安装与配置
  • (官网安装) 基于CentOS 7安装MangoDB和MangoDB Shell
  • (接口封装)
  • (三)c52学习之旅-点亮LED灯
  • (十) 初识 Docker file
  • (四)Android布局类型(线性布局LinearLayout)
  • (一)utf8mb4_general_ci 和 utf8mb4_unicode_ci 适用排序和比较规则场景
  • (转)真正的中国天气api接口xml,json(求加精) ...
  • .bat批处理(三):变量声明、设置、拼接、截取
  • .Mobi域名介绍