课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
内存管理是程序员在学习计算机编程开发技术的时候需要重点掌握的一个功能应用,下面我们就通过案例分析来了解一下,软件开发内存管理常用方法。
1.什么是虚拟内存?
虚拟内存是一种内存分配方案,是一项可以用来辅助内存分配的机制。
因为每一个进程同时运行,怎么能保证每一进程访问的不是相同的物理内存呢?
让每一个进程都有自己的虚拟内存,进程持有的虚拟地址会通过CPU芯⽚中的内存管理单元(MMU)的映射关系,来转换变成物理地址,然后再通过物理地址访问内存。
2.操作系统是如何管理虚拟地址与物理地址之间的关系?
内存分段:段选择因子+段内偏移量。每一个进程分配一段内存。
问题:内存碎片
解决方法:内存交换:就是把应用先放入硬盘中,再重新读取到内存,把中间空余的位置补全。比如把音乐放入硬盘中,重新读取,重新读取的时候就紧紧跟着那已经被占⽤了的512MB内存后⾯,这样就能空缺出连续的256MB空间,于是新的200MB程序就可以装载进来。
新问题:内存交换效率低的问题?内存交换需要频繁和硬盘交互,效率低。如果内存交换的时候,交换的是⼀个占内存空间很⼤的程序,这样整个机器都会显得卡顿。
解决方法:内存分页
内存分页(固定大小的页):页号+页内偏移量。将虚拟内存和物理内存切成一个个固定尺寸的大小,通过一个中间值"页表"来对应,每一个页表有固定数量的"页表项"。每一个进程对应一个页表,所以每一个页表都是"固定的"大小,linux占4kb。可以说每一个进程都有大小相同的页。
换出:如果内存空间不足,通过特定的算法(后面说)会把一些页暂时写在硬盘上。换入:一旦需要的时候再加载进来。
内存分页的换入换出的单位是页,进程空间不够时加载进来几页就行。就增加了内存交换的效率。
问题:有的进程不需要这么大的页,但是每个进程的页大小是相同的,所以就造成了很大的页的浪费,
解决方法:多级页表
多级页表(灵活变化大小的页):比如将100万个页表项分为1024个,每一个页表项也是一个页表,也有1024个页表项。
这样做的好处是:如果某个⼀级页表的页表项没有被用到,也就不需要创建这个页表项对应的⼆级页表了,即可以在需要时才创建二级页表。动态的扩增页的大小。
【免责声明】:本内容转载于网络,转载目的在于传递信息。文章内容为作者个人意见,本平台对文中陈述、观点保持中立,不对所包含内容的准确性、可靠性与完整性提供形式地保证。请读者仅作参考。更多内容请加danei0707学习了解。欢迎关注“达内在线”参与分销,赚更多好礼。