这篇博客,我们主要解决以下的两个问题:
- malloc()申请1G的内存能否成功?判断依据是什么?
- 申请了一块空间没有free,进程结束,那么空间是否被回收?
如下程序完成编译后,一边运行一边查看资源管理器内存占用变化情况:
却发现内存似乎没有发生任何明显的变化,这是为什么呢?
因为我们申请了空间而未使用,因此系统并未向我们分配。
然而,修改代码后
此时内存占用逐渐增大,之后又恢复原样,这是因为进程已经结束,与该进程相关的所有资源都被回收了(被动回收)。
那么,假如我们申请超出内存大小的空间呢?
初始占用情况以及修改代码如下:
显然,编译后终端已经向我们输出了警告。
我们强制执行,此时内存空间已经不够我们使用,超出了物理内存,所以将一部分放置在虚拟内存中,申请空间并未超出其总大小。
假设我们使用swapoff -a
命令关闭虚拟内存,那么此时申请空间将会直接失败。
回答之前的问题:
- malloc()申请1G的内存能否成功?判断依据是什么?
① 申请的空间 < 物理内存空间
② 申请的空间 < 物理内存空间 + 虚拟内存空间
上述两种情况是可以成功的。 - 申请了一块空间没有free,进程结束,那么空间是否被回收?
依然会被回收