Очень похожий вопрос был задан для .net
среды Windows:
Как вы защитите себя от чрезмерного потребления памяти, сбивающего ПК?
Этот вопрос задается для среды Unix с использованием C или C ++. В качестве примера рассмотрим опасный маленький блок ниже:
#include <vector>
int main() {
int n;
std::vector<double> A(n);
}
Если вам повезет, код выдаст ошибку диапазона. Если вам не повезло (в моем случае значение a в памяти было 283740392), код быстро использует всю доступную оперативную память и вызовет массовую перегрузку на диск, что приводит к быстрому размыванию ОС до виртуальной остановки, после чего ее можно убить. Конечно, этот процесс всегда можно завершить, но восстановление может занять несколько минут, так как все остальные запущенные процессы должны быть загружены обратно в память. Это , а не вопрос, ответ на который подразумевает нехватку ОЗУ, можно было бы легко запустить процесс, который затопит любую доступную машину.