下载此文档

三内存管理应用程序设计.pptx


文档分类:IT计算机 | 页数:约115页 举报非法文档有奖
1/115
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/115 下载此文档
文档列表 文档介绍
第1/76页三、内存管理应用程序设计内存管理的相关概念内存数据空间的动态分配内存代码空间的动态分配第2/、变换、保护和扩充,存储管理还应该能够在内存和外存之间交换数据和代码。在Windows操作系统下,存储器被保护起来,程序和用户无法直接访问,需要在程序中通过静态和动态两种方式来访问。Windows的内存管理完成物理内存和虚拟内存之间的交换,虚拟内存是32位的,多达4GB的大小,内存管理还提供了一个核心服务,完成内存映射文件、写时复制内存和用户程序使用的大量和稀疏内存的管理。第3/76页两种使用内存的基本方法静态方法数组,例如Studentstudent[501]动态方法指针,例如Student*student=newStudent[count+1]第4/76页WindowsNT内存管理Windows可以管理4GB大小的空间;操作系统使用其中2GB空间,每个用户进程可以使用2GB的专用地址空间。Win32API提供:VirtualXXX形式的以页为单位的虚拟内存函数;CreateMapFile、MapViewofFile内存映射文件函数;HeapXXX堆栈函数。第5/76页内存管理WindowsNT在X86体系下虚拟地址空间的分布:第6/76页例3-6动态申请虚拟内存整数阶乘计算到13就会出错。怎么办?使用动态申请的虚拟内存空间编写计算任何数的阶乘的程序。解体思路:计算较大数的阶乘的计算一般使用数组来存放阶乘的位数。但是C++中数组最大长度是10万,这将影响使用的范围。可以通过使用动态内存分配(指针)来解决。本程序采用动态申请虚拟内存空间的方法,不使用物理内存,而是使用虚拟内存,从而使求解问题的范围扩大。阶乘源代码阶乘执行代码第7/76页程序算法①从命令行接收输入并使用strtol函数将其转换为long型的整数(n为要求阶乘的数)。②通过函数VirtualAlloc保留n×10240的地址空间,申请n×1024的地址空间。③调用计算阶乘函数lfac。④一位一位显示阶乘结果。⑤通过函数VirtulFree释放虚拟内存。第8/76页函数VirtualAlloc用函数VirtualAlloc保留或申请虚拟内存空间。该函数格式如下:LPVOIDVirtualAlloc(LPVOIDlpAddress, //起始地址DWORDdwSize, //大小DWORDflAllocationType,//分配类型(MIT等)DWORDflProtect //保权限(PAGE_READWRITE等));第9/76页函数VirtualFree使用函数VirtualFree释放虚拟内存,函数格式:BOOLVirtualFree(LPVOIDlpAddress,//起始地址DWORDdwSize,//大小DWORDdwFreeType//释放类型(MEM_RELEASE等));第10/76页源程序#include<>#include<>intlfac(int*a,intn){ intsum,sc; for(inti=0;i<n*1024;i++)//空间清零 a[i]=0; a[0]=1;//最低位设为1 for(i=2;i<=n;i++)//n的阶乘的循环{ sc=0; for(intj=0;j<n*1024;j++)//阶乘每一位处理的循环{sum=a[j]*i+sc;//上一次进位值和当前计算结果求和 sc=sum/10; //存放进位数值 a[j]=sum%10; //将余数存入数组} } if(sc>0) return-1; else return0;}

三内存管理应用程序设计 来自淘豆网www.taodocs.com转载请标明出处.

相关文档 更多>>
非法内容举报中心
文档信息
  • 页数115
  • 收藏数0 收藏
  • 顶次数0
  • 上传人wz_198613
  • 文件大小1.05 MB
  • 时间2019-04-15