全面剖析Windows内存管理机制及C++内存分配技术案例

小微 科技全面剖析Windows内存管理机制及C++内存分配技术案例已关闭评论118字数 1023阅读模式
摘要· 运行exe程序建立进程:运行这个exe程序时,系统会创建一个进程,建立进程控制块PCB,生成进程页目和页表,放到PCB中。数据对齐:数据的内存地址除了了以数据的大小,余数为0时...

· 运行exe程序

树立过程:运行这个exe程序时,系统会创立一个过程,树立过程节制块PCB,生成过程页目以及页表,放到PCB中。文章源自微观生活(93wg.com)微观生活-https://93wg.com/16998.html

数据对齐:数据的内存地址除了以数据的大小,余数为0时说明数据是对齐的。现在的编译器编译时就斟酌数据对齐的问题,生成exe文件后,数据基本上是对齐的,CPU运行时,存放器有标志标识CPU是不是能够自动对齐数据,如果遇到不能对齐的情况,或者通过两次走访内存,或者通知操作系统处理。文章源自微观生活(93wg.com)微观生活-https://93wg.com/16998.html

要注意的是,如果数据没有对齐,CPU处理的效力是很低的。文章源自微观生活(93wg.com)微观生活-https://93wg.com/16998.html

文件映照:系统不会将整个exe文件以及所有的DLL文件装载进物理内存中,同时它也不会装载进页面文件中。相反,它会树立文件映照,也就是应用exe自身当作页面文件。系统将部份二进制代码装载进内存,分配页面给它。文章源自微观生活(93wg.com)微观生活-https://93wg.com/16998.html

假定分配了一个页面,物理地址为0x0232 FFF1。其中装载的一个指令虚拟地址为0x4000 1001=0100 0000 00 0000 0000 01 0000 0000 0001。一个页面有4K,系统会将指令保留在低12位0x0001的地址处。同时,系统依据高10位0x0100找到页目项,如果没有关联的页表,系统会生成一个页表,分配一个物理页;然后,依据中10位0x0001找到表项,将物理地址0x0232 FFF1存进去。文章源自微观生活(93wg.com)微观生活-https://93wg.com/16998.html

执行进程:文章源自微观生活(93wg.com)微观生活-https://93wg.com/16998.html

执行时,当系统拿到一个虚拟地址,就依据页目以及页表找到数据的地址,依据页目上的值可以判断页表是在页文件中还是在内存中;文章源自微观生活(93wg.com)微观生活-https://93wg.com/16998.html

如果在页文件中,会将页面导入内存,更新页目项。读取页表项的值后,可以判断数据页文件中还是在物理内存中;如果在页文件中,会导入到内存中,更新页表项。终究,拿到了数据。文章源自微观生活(93wg.com)微观生活-https://93wg.com/16998.html

在分配物理页的进程中,系统会依据内存分配的状态适量淘汰暂时不用的页面,如果页面内容扭转了(通过页表项的标志位),保留到页文件中,系统会保护内存与页文件的对应关系。文章源自微观生活(93wg.com)微观生活-https://93wg.com/16998.html

因为将exe文件当作内存映照文件,当需要扭转数据,如更改全局变量的值时,应用Copy-On-Write的机制,从新生成页文件,将结果保留在这个页文件中,原来的页文件还是需要被其他过程实例使用的。文章源自微观生活(93wg.com)微观生活-https://93wg.com/16998.html

在清楚了指令以及数据是怎么导入内存,怎么找到它们的情况下,剩下的就是CPU不断的取指令、运行、保留数据的进程了,当过程收场后,系统会清空以前的各种结构、释放相关的物理内存以及删除了页文件。

以上就是微观生活(93wg.com)关于“全面剖析Windows内存管理机制及C++内存分配技术案例”的详细内容,希望对大家有所帮助!

继续阅读
 
小微
  • 版权声明: 本文部分文字与图片资源来自于网络,转载此文是出于传递更多信息之目的,若有来源标注错误或侵犯了您的合法权益,请立即通知我们(管理员邮箱:81118366@qq.com),情况属实,我们会第一时间予以删除,并同时向您表示歉意,谢谢!
  • 转载请务必保留本文链接:https://93wg.com/16998.html