Читать книгу Ссылки и указатели в C++: от основ к безопасности и современному коду - - Страница 54

Мониторинг, лимиты и осознанное использование

Оглавление

В C++ всегда обрабатывайте исключения от выделения: new бросает std::bad_alloc при OOM (в отличие от malloc, который возвращает nullptr). Используйте try-catch для грациозного выхода. Для контейнеров вроде std::vector применяйте reserve() заранее, чтобы проверить доступность памяти. Мониторьте использование: в коде можно использовать ОС-API (например, getrusage в Unix) для трекинга виртуальной памяти.

Пример обработки OOM:

#include <iostream>


#include <new> // Для std::bad_alloc


int main() {


try {


auto ptr = new int[10000000000ULL]; // Попытка выделить ~40 ГБ


// Если успешно используйте


} catch (const std::bad_alloc& e) {


std::cerr << "Ошибка выделения памяти: " << e.what() << std::endl;


// Грациозный выход: очистка, логи


return 1;


}


// … остальной код


return 0;


}

Ссылки и указатели в C++: от основ к безопасности и современному коду

Подняться наверх