Читать книгу Ссылки и указатели в 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;
}