WinApi学习笔记-内存管理
一:进程虚拟地址空间的实现
每个进程都有一个私有的虚拟地址空间
系统将每个进程的虚拟地址空间映射到物理内存上
为了实现每个进程都有一个私有的虚拟地址空间系统为每个进程都创建了一个页目录和一组页表
每个进程的页表是独立的
而内核空间的页表是所有进程共享的
X86平台上有一个CR3寄存器,该寄存器保存当前运行的进程的页目录地址
系统进行进程切换时,会将CR3内的地址置为将要执行的进程的页目录地址
每个进程都有一个KPROCESS结构的属性,其中包括了进程页目录地址
二:数据共享与保护
有一些进程间共享的数据,系统的可执行代码(系统DLL)等,在各个进程间都是一致的
由此可得:不同进程的虚拟内存分页可以映射为相同的物理内存分页
如果多个进程同时向一个DLL文件写入数据怎么办?
系统是通过Copy-On-Write实现数据保护的
1.进程将某个系统DLL加载入进程内存空间
2.开始对该DLL进行写操作
3.操作系统监视到写操作将要进行
4.系统将进程虚拟内存分页映射到另一个新的物理内存分页(此分页是不共享的)
5.系统将DLL的内容也映射到这个新的物理内存分页
6.在新的物理内存分页上完成写操作
这样就不会影响到其他进程访问该DLL了
三:虚拟内存布局、分工、堆和栈
虚拟内存空间分两部分,低2G由应用程序使用,高2G由系统内核使用
应用程序使用的虚拟内存空间分为 代码,数据(全局变量),系统和用户DLL的代码,各线程的栈,堆等
进程的每个线程都有自己的栈
栈与函数的调用,执行和返回 局部变量的保存相关
堆是一种可以动态分配和释放的内存
内存分配函数都是通过堆进行分配内存的
四:总结
虚拟地址空间中的数据是分页管理的
应用程序不用考虑系统中其他应用程序使用内存的情况
虚拟地址并不是物理地址空间中的地址
如果系统中没有足够的物理内存供使用,那么操作系统会将当前没有使用的内存分页调度到硬盘上保存起来,应用程序不用关心系统怎么实现调度的
WinApi学习笔记-内存管理相关推荐
- 11.FreeRTOS学习笔记-内存管理
几种内存分配算法的比较 heap_1.c 管理方案是 FreeRTOS 提供所有内存管理方案中最简单的一个,它只能申请内存而不能进行内存释放,并且申请内存的时间是一个常量 heap_2.c方案支持释放 ...
- Cocos2d-x学习笔记—内存管理机制
Cocos2d-x 3.x内存管理机制 1:C++内存管理 1-1:内存分配区域 创建对象需要两个步骤:第一步,为对象分配内存:第二步,调用构造函数初始化内存.在第一步中,可以选择几个不同的分配区域. ...
- C语言学习笔记 —— 内存管理
一.内存模型 对于一个C语言程序而言,内存空间主要由五个部分组成 代码段(text).数据段(data).未初始化数据段(bss),堆(heap) 和 栈(stack) 组成,其中代码段,数据段和BS ...
- 2 Oracle深度学习笔记 内存架构之UGA
分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 2.Or ...
- 2.Oracle深度学习笔记——内存架构之UGA
2.Oracle深度学习笔记--内存架构之UGA 欢迎转载,转载请标明出处: http://blog.csdn.net/notbaron/article/details/50558136 UGA是回 ...
- Linux内核笔记--内存管理之用户态进程内存分配
内核版本:linux-2.6.11 Linux在加载一个可执行程序的时候做了种种复杂的工作,内存分配是其中非常重要的一环,作为一个linux程序员必然会想要知道这个过程到底是怎么样的,内核源码会告诉你 ...
- 深入学习python内存管理
深入Python的内存管理 作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 语言的内存管理是语言设计的一个重要方面.它是决定语言性 ...
- 《现代操作系统》第3章读书笔记--内存管理(未完成)
写在前面:本文仅供个人学习使用,如有侵权,请联系删除.文章中所用图片绝大多数来源于<现代操作系统(第4版)>,请读者支持原版. 内存(RAM) 是计算机中一种需要认真管理的重要资源.一个事 ...
- python内存管理可以使用del_Python深入学习之内存管理
语言的内存管理是语言设计的一个重要方面.它是决定语言性能的重要因素.无论是C语言的手工管理,还是Java的垃圾回收,都成为语言最重要的特征.这里以Python语言为例子,说明一门动态类型的.面向对象的 ...
- 计算机操作系统学习笔记----进程管理
进程与线程 进程是资源分配的基本单位,也是独立运行的基本单位.进程是资源分配的基本单位,这是与线程的主要区别. 程序的顺序执行具有如下特征: 顺序性:处理器的操作严格按照程序所规定的顺序执行. 封闭性 ...
最新文章
- VUE 框架添加全局公共方法 , 保留小数点后两位
- jvm简单笔记(3)
- 程序员之路──如何学习C语言并精通C语言
- [转]颠覆式前端UI开发框架:React
- 数据结构与算法之反转单向链表和双向链表
- build.gradle里dependencies标签页的实现原理
- c语言:malloc函数的简介
- C# 参考之方法参数关键字:params、ref及out (收集)
- 生活中的实验 —— 家庭电路
- 什么是多态,多态的实现方法是什么?
- 五、Linux常用命令——帮助命令
- 传输控制协议端口服务多路开关选择器
- 2. 数理统计---样本分布
- RB Tree的部分实现
- 9个offer,12家公司,35场面试,从微软到谷歌,应届计算机毕业生的求职之路
- 项目经理如何做好授权管理?
- 数字谐音记忆编码连连看网页应用
- 蓝桥杯 ALGO-1001 跳马
- 常用字符串函数的使用
- 【unity 保卫星城】--- 开发笔记06(散弹 武器)
热门文章
- pythontab_PythonTab 中文网简介
- 深度学习之卷积神经网络CNN及tensorflow代码实现示例详细介绍(转载)
- 2018云+未来峰会圆桌面对面:以网络安全之能,造国之重器
- 基于RDP瘦客户机协议的简要说明
- 二元最近的共同祖先问题(O(n) time 而且,只有一次遍历,O(1) Space (它不考虑函数调用栈空间))...
- java设计模式_抽象工厂
- sysbench 0.5 oltp测试笔记
- 国内外网站设计与浏览习惯的差异
- 回溯法 - 递归 - n皇后问题 - 所有解
- 蓝桥杯 逆波兰表达式——2013年省赛C/C++A组真题6