【问题标题】:I executed the following code and my system stuck, but I am not able to figure out reason behind it?我执行了以下代码并且我的系统卡住了,但我无法找出背后的原因?
【发布时间】:2020-07-16 16:02:07
【问题描述】:
#include<stdio.h>
int main(){
    while(1){
        int *a = new int[1000];
    }
}

堆在这里如何增长以及操作系统如何处理它?我不明白这里是如何处理内存管理的。我以为操作系统分配了一个固定大小的堆栈和堆?分配给程序的最大堆和堆栈数量是多少?如何分配?

【问题讨论】:

  • 您在无限循环中进行分配。这意味着它将继续分配并且似乎什么都不做。
  • 询问您的链接器。

标签: c++ memory operating-system virtual-memory


【解决方案1】:

Int *a = new int[1000] 在内存的新位置创建一个数组,并将指向数组第一个元素的指针设置为变量 a。 (变量 a 是一个指针)。你不会在java和其他语言中遇到这个问题,因为它们有垃圾收集器,删除旧数组,c++没有它,所以你需要使用delete关键字。 (删除变量和数组的语法略有不同。您的循环将一直运行,直到您的 pc 用完 ram,请阅读 C++ 中的内存泄漏

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-30
    • 1970-01-01
    • 1970-01-01
    • 2010-09-07
    相关资源
    最近更新 更多