4G的存否机器上申请8G的内存,是可成否可以成功?这个问题没有办法,是的的内没有办法进行回答,这个问题要考虑三个前置条件:
操作系统是机器 32 位的,还是上申 64 位的?
申请完 8G 内存后会不会被使用?
操作系统有没有使用 Swap 机制?
先在这说一下结论:
如果没有 Swap 分区,因为物理空间不够,进程会被操作系统杀掉,原因是 OOM(内存溢出);
如果有 Swap 分区,即使物理内存只有 4GB,程序也能正常使用 8GB 的内存,进程可以正常运行;
为什么要考虑操作系统是 32 位的,还是 64 位的这个前置条件呢?
我们先来回顾一下之前学习的虚拟内存的大小的知识
应用程序通过 malloc 函数申请内存的时候,实际上申请的是虚拟内存,此时并不会分配物理内存。
当应用程序读写了这块虚拟内存,CPU 就会去访问这个虚拟内存, 这时会发现这个虚拟内存没有映射到物理内存, CPU 就会产生缺页中断,进程会从用户态切换到内核态,并将缺页中断交给内核的 Page Fault Handler (缺页中断函数)处理。
缺页中断处理函数会看是否有空闲的物理内存:
32 位操作系统和 64 位操作系统的虚拟地址空间大小是不同的,在 Linux 操作系统中,虚拟地址空间的内部又被分为内核空间和用户空间两部分,如下所示:
通过这里可以看出:
因为 32 位操作系统,进程最多只能申请 3 GB 大小的虚拟内存空间,所以进程申请 8GB 内存的话,在申请虚拟内存阶段就会失败。
64 位操作系统,进程可以使用 128 TB 大小的虚拟内存空间,所以进程申请 8GB 内存是没问题的,因为进程申请内存是申请虚拟内存,只要不读写这个虚拟内存,操作系统就不会分配物理内存。
注意:即使 malloc 申请的是虚拟内存,只要不去访问就不会映射到物理内存,但是申请虚拟内存的过程中,还是使用到了物理内存(比如内核保存虚拟内存的数据结构,也是占用物理内存的),如果你的主机是只有 2GB 的物理内存的话,大概率会触发 OOM。
如果没有被使用,就不用分配物理内存,所以64系统的前提下:一定是可以成功的没有任何问题。
如果申请的内存被使用了,也就意味着要进行物理内存的分配了,这个时候就要考虑是否开启了Swap机制。
在系统的物理内存不够用的时候,把硬盘内存中的一部分空间释放出来,以供当前运行的程序使用。那些被释放的空间可能来自一些很长时间没有什么操作的程序,这些被释放的空间被临时保存到Swap分区中,等到那些程序要运行时,再从Swap分区中恢复保存的数据到内存中。
使用 Swap 机制优点是,应用程序实际可以使用的内存空间将远远超过系统的物理内存。由于硬盘空间的价格远比内存要低,因此这种方式无疑是经济实惠的。当然,频繁地读写硬盘,会显著降低操作系统的运行速率,这也是 Swap 的弊端。
责任编辑:武晓燕 来源: 今日头条 8G内存Swap(责任编辑:探索)
比速科技(01372.HK)发布公告:拟发行4000万股认购股份
金融产业形成合力助推雄安新区高质量发展 打造数字金融发展的新高地
广西钦州建成化工新材料一体化对接“一带一路”经济带产业的发展
赛生药业(06600.HK)年度实现纯利7.5亿元 每股基本盈利约为人民币1.38元