Я думаю, это не столько вопрос, сколько просьба о комментариях.bad_alloc с QVector, но не с std :: vector
Сегодня я пытался загрузить более крупный набор данных в свое программное обеспечение и столкнулся с несколькими плохими выделениями.
Таким образом, соответствующий код выглядит следующим образом.
QVector<float>verts;
try
{
verts.reserve(numPoints * 6);
}
catch (std::bad_alloc&)
{
qDebug() << "error";
}
NumPoints в данном случае 92911773 поэтому он будет пытаться выделить NumPoints * 6 * SizeOf (с плавающей точкой) = 2,214,922,152 байт. Моя машина работает с 64-битным Linux с 12 ГБ оперативной памяти. Так что это не должно быть проблемой.
Таким образом, это исключает исключение bad_alloc. Теперь, если я изменю QVector на std :: vector, он будет работать. Может кто-нибудь прокомментировать это?
Doh, возможно, видел это сам. – Roest
log (6 * 92911773)/log (2) = 29,05 ..., поэтому простой счетчик предметов должен комфортно вписываться в 32-битный int –
Кажется, внутренние элементы QVector также 32-разрядные: -/ –