为什么操作系统不拒绝此程序的内存?

Why doesn't the operating system deny the memory for this program?

本文关键字:内存 程序 操作系统 拒绝 为什么      更新时间:2023-10-16

以下C 动态分配内存的巨大数组,其中包括大量整数数组。

#include <iostream>
// VALUE1 > 1000000
class Int{
int* p = new int[VALUE1];
};
int main() {
// VALUE2 > 1000000
Int* ppi = new Int[VALUE2];
while(true){
    }
}

我理解的是,内存分配在堆中(很大(。该程序向操作系统请求内存,并处理内存分配。因此,我的问题是,如果没有可用的内存资源,那么为什么OS拒绝记忆(尽管它会崩溃(?这是操作系统。以上程序使我的计算机冻结。如果这很重要,我在Linux 4.9上有8 GB RAM。

如果程序没有可用的内存资源,为什么OS拒绝内存?

OS可能会拒绝整体内存的整体分配,否则可能不会。不否认分配并不是所有操作系统都必须做的。

允许整体定位意味着程序可以根据需要分配尽可能多的虚拟内存,并且在不再有免费的物理内存映射之前终止。仅在访问内存时映射物理内存。即使映射了所有物理内存,其中一些也可以交换到磁盘上。

在Linux 4.9

Linux确实支持内存的整体分配。

以上程序使我的计算机冻结。

该程序是无限循环。如果循环未优化为睡眠或拆除,则将无限期地要求处理器时间。如果只有1个CPU核心,则根据调度算法,可能需要一些时间才能获得CPU时间。