Я выполнил следующий код и моя система зависла, но я не могу выяснить причину этого? - PullRequest
0 голосов
/ 04 апреля 2020
#include<stdio.h>
int main(){
    while(1){
        int *a = new int[1000];
    }
}

Как здесь растет куча и как операционная система справляется с этим? Я не понимаю, как здесь осуществляется управление памятью. Я думал, что ОС выделяет стек фиксированного размера и кучу? Каков максимальный объем кучи и стека, выделенных программе, и как?

1 Ответ

0 голосов
/ 04 апреля 2020

Int * a = new int [1000] создает массив в новом месте памяти и устанавливает указатель на первый элемент массива в переменную a. (Переменная a является указателем). Вы не получите эту проблему в java и других языках, потому что у них есть сборщик мусора, который удаляет старый массив, у c ++ его нет, поэтому вам нужно использовать ключевое слово delete. (Удаление переменных и массивов имеет немного другой синтаксис. Ваш l oop будет работать до тех пор, пока у вас не закончится память, прочитайте об утечке памяти в c ++

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...