Наше приложение выделяет большие геометрические координаты -
Это должен быть вектор (что означает смежный), потому что он в конечном итоге отправляется в OpenGL для рисования модели.
И Open GL работает со смежными данными.
В какой-то момент распределение не выполняется, что означает, что резервирование памяти вызывает исключение std :: bad_alloc. Тем не менее, в этот момент в памяти еще много свободного места.
Проблема в том, что смежный блок не может быть выделен.
Так 1-два вопроса:Распределение памяти CRT
Есть ли способ контролировать то, как CRT выделяет память? Или способ его дефрагментации (сумасшедшая идея)).
Возможно, есть способ проверить, что время выполнения может выделять блок памяти некоторого размера (не используя try/catch).
Проблема, описанная выше, была частично решена путем фрагментации этого одного большого вектора на несколько векторов и вызова OpenGL один раз для каждого из них.
Однако все же возникает вопрос, как определить размер каждого меньшего вектора - если их много с довольно небольшим размером, мы почти наверняка поместим память, но будет много вызовов OpenGL, что замедлит визуализацию.
Посмотрите на эту ссылку: [Пользовательский распределитель для хранения stl-вектора в объектах буфера OpenGL] (http://stackoverflow.com/questions/8862010/custom-allocator-to-store-stl-vector-in-opengl-buffer -объекты) И, как сказал Cat Plus Plus, убедитесь, что у вас 64-разрядный процессор и ОС :) – paulsm4
Переключитесь на 64 бит. –