4G的机器上申请8G的内存,是否可以成功?

开发 前端
在系统的物理内存不够用的时候,把硬盘内存中的一部分空间释放出来,以供当前运行的程序使用。那些被释放的空间可能来自一些很长时间没有什么操作的程序,这些被释放的空间被临时保存到Swap分区中,等到那些程序要运行时,再从Swap分区中恢复保存的数据到内存中。
前言

4G的机器上申请8G的内存,是否可以成功?这个问题没有办法,是没有办法进行回答,这个问题要考虑三个前置条件:

操作系统是 32 位的,还是 64 位的?

申请完 8G 内存后会不会被使用?

操作系统有没有使用 Swap 机制?

先在这说一下结论:

  • 在 32 位操作系统,因为进程最大只能申请 3 GB 大小的虚拟内存,所以直接申请 8G 内存,会申请失败。
  • 在 64 位操作系统,因为进程最大只能申请 128 TB 大小的虚拟内存,即使物理内存只有 4GB,申请 8G 内存也是没问题,因为申请的内存是虚拟内存。如果这块虚拟内存被访问了,要看系统有没有 Swap 分区:

如果没有 Swap 分区,因为物理空间不够,进程会被操作系统杀掉,原因是 OOM(内存溢出);

如果有 Swap 分区,即使物理内存只有 4GB,程序也能正常使用 8GB 的内存,进程可以正常运行;

操作系统是 32 位的,还是 64 位的?

为什么要考虑操作系统是 32 位的,还是 64 位的这个前置条件呢?

我们先来回顾一下之前学习的虚拟内存的大小的知识

应用程序通过 malloc 函数申请内存的时候,实际上申请的是虚拟内存,此时并不会分配物理内存。

当应用程序读写了这块虚拟内存,CPU 就会去访问这个虚拟内存, 这时会发现这个虚拟内存没有映射到物理内存, CPU 就会产生缺页中断,进程会从用户态切换到内核态,并将缺页中断交给内核的 Page Fault Handler (缺页中断函数)处理。

缺页中断处理函数会看是否有空闲的物理内存:

  • 如果有,就直接分配物理内存,并建立虚拟内存与物理内存之间的映射关系。
  • 如果没有空闲的物理内存,那么内核就会开始进行回收内存的工作,如果回收内存工作结束后,空闲的物理内存仍然无法满足此次物理内存的申请,那么内核就会触发 OOM 。

32 位操作系统和 64 位操作系统的虚拟地址空间大小是不同的,在 Linux 操作系统中,虚拟地址空间的内部又被分为内核空间和用户空间两部分,如下所示:

通过这里可以看出:

  • 32 位系统的内核空间占用 1G,剩下的 3G 是用户空间;
  • 64 位系统的内核空间和用户空间都是 128T,剩下的中间部分是未定义的。

32 位系统的场景

因为 32 位操作系统,进程最多只能申请 3 GB 大小的虚拟内存空间,所以进程申请 8GB 内存的话,在申请虚拟内存阶段就会失败。

64 位系统的场景

64 位操作系统,进程可以使用 128 TB 大小的虚拟内存空间,所以进程申请 8GB 内存是没问题的,因为进程申请内存是申请虚拟内存,只要不读写这个虚拟内存,操作系统就不会分配物理内存。

注意:即使 malloc 申请的是虚拟内存,只要不去访问就不会映射到物理内存,但是申请虚拟内存的过程中,还是使用到了物理内存(比如内核保存虚拟内存的数据结构,也是占用物理内存的),如果你的主机是只有 2GB 的物理内存的话,大概率会触发 OOM。

申请后的8G内存是否真的被使用

如果没有被使用,就不用分配物理内存,所以64系统的前提下:一定是可以成功的没有任何问题。

操作系统有没有使用 Swap 机制?

如果申请的内存被使用了,也就意味着要进行物理内存的分配了,这个时候就要考虑是否开启了Swap机制。

Swap机制

在系统的物理内存不够用的时候,把硬盘内存中的一部分空间释放出来,以供当前运行的程序使用。那些被释放的空间可能来自一些很长时间没有什么操作的程序,这些被释放的空间被临时保存到Swap分区中,等到那些程序要运行时,再从Swap分区中恢复保存的数据到内存中。

使用 Swap 机制优点是,应用程序实际可以使用的内存空间将远远超过系统的物理内存。由于硬盘空间的价格远比内存要低,因此这种方式无疑是经济实惠的。当然,频繁地读写硬盘,会显著降低操作系统的运行速率,这也是 Swap 的弊端。

责任编辑:武晓燕 来源: 今日头条
相关推荐

2022-06-07 19:51:21

CPU函数内存

2013-12-02 14:15:35

4G移动

2022-07-28 00:25:22

5G4G速度

2013-12-17 09:52:55

4G移动互联网

2021-05-10 10:16:03

5G4G网络

2021-07-17 22:46:06

4G5G网络

2017-08-01 08:28:46

4G服务器MySQL

2013-01-30 09:25:21

4G通信网络LTE

2022-08-03 15:17:07

5G4GLTE

2011-05-06 16:47:06

笔记本Alienware M

2021-01-10 21:13:21

4G5GLTE技术

2013-12-05 09:20:58

中移动4G牌照4G网络

2014-03-10 16:00:58

4G网络蓝汛

2023-12-07 18:16:11

5G6G分散

2011-09-29 10:13:30

4G3G

2013-06-27 14:24:25

华为4G网络4G无线4G

2017-12-26 14:56:44

虚拟化基础知识

2019-10-28 14:45:45

5G手机4G手机厂商

2020-08-21 10:48:23

5G4G网络

2014-07-29 10:24:34

4G3G
点赞
收藏

51CTO技术栈公众号