'std::bad_alloc' только на удаленном сервере (travis-ci)

У меня есть этот странный 'std::bad_alloc' только во время моего теста с использованием серверов travis-ci. Я проверил свой код на нескольких машинах с одинаковыми параметрами компилятора, и я не вызываю никакую внешнюю библиотеку (только стандарт C++11).

./convexhull ../examples/convexhull/instances/size100space10.csv 1
terminate called after throwing an instance of 'std::bad_alloc'
  what():  std::bad_alloc
/home/travis/build.sh: line 45:  3957 Aborted                 (core dumped) ./convexhull ../examples/convexhull/instances/size100space10.csv 1

Я новичок в travis-ci, поэтому мой вопрос может быть или не связан с ним, но я пока не имею понятия. Тем не менее, это, похоже, не связано с какой-то проблемой синтаксиса (поскольку мой код создается и выполняется)

Кто-нибудь имеет представление о том, что может быть причиной плохого распределения ресурсов в аналогичном контексте? Есть ли более быстрый способ, чем использовать valgrind с travis-ci?

1 ответ

std::bad_alloc означает, что вы запросили выделение данных в куче, но памяти было недостаточно. Это может быть прямой запрос с new или косвенный, например создание очень большого std::vector. Обратите внимание, что std::bad_alloc редко встречается по нескольким причинам. Во-первых, по умолчанию linux всегда успешно выделяет память, потому что реальное выделение выполняется при попытке доступа к ней (и в этом случае программа завершается с помощью OOM). И вторая причина в том, что сегодня у нас обычно достаточно оперативной памяти.

CI сервер - это особый случай. Они должны предоставлять надежную инфраструктуру, которая выполняет ненадежный и ненадежный код. Поэтому им приходится ограничивать процессы, мешающие им потреблять слишком много ресурсов. Это, в частности, означает, что использование ОЗУ также ограничено и ограничение не очень велико. Таким образом, вы должны использовать меньше оперативной памяти в своих тестах. Возможно, вам следует уменьшить размер тестовых данных.

Другие вопросы по тегам