为什么虚拟内存设置了还是内存不足呢?
方法一:清除剪切板
如果当剪贴板中存放的是一幅图画或大段文本时,会占用较多内存。这时清除“剪贴板”中的内容,释放它占用的系统资源。问题就应该能得到解决。清除剪贴板的方法是将里面的内容随便复制到记事本里面,这样就行了。
方法二:重启计算机
如果只是简单的关闭退出程序,还不能完全释放系统资源,对于内存本来就不够用的电脑来说,没得什么效果,这时就需要重启电脑,让资源得到充分释放。
方法三:禁用自动运行的程序
①单击Win+R键,打开运行对话框,输入msconfig,打开系统配置界面。
②切换到启动选项卡,在里面禁用一些不必要的启动项,这样机器就不会占用很多内存。
方法四:设置虚拟内存
①要知道虚拟内存不足也会导致系统运行错误,我们右击桌面的计算机按钮,选择属性。
②单击系统保护,然后切换到高级选项卡,点击虚拟内存中的更改按钮。
③取消勾选自动管理所有驱动器的分页文件大小,勾选自定义大小,填入合适的数值即可。
虚拟内存不能随便删除的原因是什么?
1. 读写内存的安全性:物理内存本身是不限制访问的,任何地址都可以读写,而操作系统要求不同的页面具有不同的访问权限,这是利用CPU模式和MMU的内存保护机制实现的。例如,Text Segment被只读保护起来,防止被错误的指令意外改写,内核地址空间也被保护起来,防止在用户模式下执行错误的指令意外改写内核数据。这样,执行错误指令或恶意代码的破坏能力受到了限制,顶多使当前进程因段错误终止,而不会影响整个系统的稳定性。
2,虚拟内存管理最主要的作用是让每个进程有独立的地址空间(进程间的安全):所谓独立的地址空间是指,不同进程中的同一个VA被MMU映射到不同的PA,并且在某一个进程中访问任何地址都不可能访问到另外一个进程的数据,这样使得任何一个进程由于执行错误指令或恶意代码导致的非法内存访问都不会意外改写其它进程的数据,不会影响其它进程的运行,从而保证整个系统的稳定性。另一方面,每个进程都认为自己独占整个虚拟地址空间,这样链接器和加载器的实现会比较容易,不必考虑各进程的地址范围是否冲突。现在我们也可以理解为什么共享库必须是位置无关代码了。比如libc,不同的进程虽然共享libc所在的物理页面,但这些物理页面被映射到各进程的虚拟地址空间时却位于不同的地址,所以要求libc的代码不管加载到什么地址都能正确执行。
3,VA到PA的映射会给分配和释放内存带来方便:物理地址不连续的几块内存可以映射成虚拟地址连续的一块内存。比如要用malloc分配一块很大的内存空间,虽然有足够多的空闲物理内存,却没有足够大的连续空闲内存,这时就可以分配多个不连续的物理页面而映射到连续的虚拟地址范围。
4,一个系统如果同时运行着很多进程,为各进程分配的内存之和可能会大于实际可用的物理内存,虚拟内存管理使得这种情况下各进程仍然能够正常运行