Сколько раз этот цикл будет работать?

Интервью задал вопрос:

while(1)
{
void * a = malloc(1024*1024); 
}

Сколько раз этот цикл будет выполняться на 2 gb ram и a 8 gb ram?

Я сказал бесконечный цикл, потому что нет условия завершения, даже если память будет заполнена. Он не согласен. У меня нет никакой идеи сейчас. Пожалуйста, помогите.

Ответ 1

Он должен работать бесконечно. На большинстве платформ, когда памяти больше нет, malloc() будет возвращать 0, поэтому цикл будет продолжать работать без изменения объема выделенной памяти. Linux позволяет перенаправлять память, чтобы вызовы malloc() продолжали добавлять в виртуальную память. Процесс может в конечном итоге быть убит OOM Killer, когда данные, которые malloc() использует для администрирования памяти, начинают вызывать проблемы (это будет не потому, что вы пытаетесь использовать выделенную память, потому что код ее не использует), но Linux не рассматривается как платформа в вопросе.