gpt4 book ai didi

c++ - 为什么操作系统不拒绝为该程序分配内存?

转载 作者:行者123 更新时间:2023-11-28 05:11:09 25 4
gpt4 key购买 nike

下面的 C++ 为包含大整数数组的对象动态分配内存。

#include <iostream>
// VALUE1 > 1000000
class Int{
int* p = new int[VALUE1];

};

int main() {
// VALUE2 > 1000000
Int* ppi = new Int[VALUE2];
while(true){
}
}

我的理解是内存分配在堆中(很大)。程序向操作系统请求内存并处理内存分配。所以,我的问题是,如果操作系统没有可用的内存资源,为什么操作系统不拒绝程序的内存(这会使它崩溃)?这是操作系统的工作。上面的程序让我的电脑死机。如果重要的话,我在 linux 4.9 上有 8 GB RAM。

最佳答案

why doesn't the OS deny memory to the program if it doesn't have the available memory resource?

操作系统可能会拒绝过度分配内存,也可能不会。不否认过度分配并不是所有操作系统都必须做的事情。

允许过度分配意味着允许程序分配任意多的虚拟内存,并且在不再有空闲物理内存可映射之前不会终止。物理内存只有在内存被访问时才会被映射。即使所有物理内存都已映射,其中一些也可以交换到磁盘上。

on linux 4.9

Linux 尤其支持内存过度分配。

The above programs make my computer freeze.

程序是一个无限循环。如果循环没有优化到 sleep 状态或被移除,那么它将无限期地请求处理器时间。如果只有 1 个 CPU 核心,则根据调度算法,另一个进程可能需要一些时间才能获得 CPU 时间。

关于c++ - 为什么操作系统不拒绝为该程序分配内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43472198/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com