2012-05-04 3 views
0

Наше приложение выделяет большие геометрические координаты -
Это должен быть вектор (что означает смежный), потому что он в конечном итоге отправляется в OpenGL для рисования модели.
И Open GL работает со смежными данными.
В какой-то момент распределение не выполняется, что означает, что резервирование памяти вызывает исключение std :: bad_alloc. Тем не менее, в этот момент в памяти еще много свободного места.
Проблема в том, что смежный блок не может быть выделен.
Так 1-два вопроса:Распределение памяти CRT

  • Есть ли способ контролировать то, как CRT выделяет память? Или способ его дефрагментации (сумасшедшая идея)).

  • Возможно, есть способ проверить, что время выполнения может выделять блок памяти некоторого размера (не используя try/catch).

Проблема, описанная выше, была частично решена путем фрагментации этого одного большого вектора на несколько векторов и вызова OpenGL один раз для каждого из них.
Однако все же возникает вопрос, как определить размер каждого меньшего вектора - если их много с довольно небольшим размером, мы почти наверняка поместим память, но будет много вызовов OpenGL, что замедлит визуализацию.

+0

Посмотрите на эту ссылку: [Пользовательский распределитель для хранения stl-вектора в объектах буфера OpenGL] (http://stackoverflow.com/questions/8862010/custom-allocator-to-store-stl-vector-in-opengl-buffer -объекты) И, как сказал Cat Plus Plus, убедитесь, что у вас 64-разрядный процессор и ОС :) – paulsm4

+3

Переключитесь на 64 бит. –

ответ

1

Вы не можете выйти за пределы ~ 600MiB непрерывной памяти в 32 адресное пространство. Скомпилируйте как 64-разрядную версию и запустите ее на 64-битной платформе, чтобы обойти это (надеюсь, навсегда).

При этом, если у вас есть требуемые требования к памяти, вы должны изучить пользовательский распределитель. Вы можете использовать выделенное на диске распределение, которое будет отображаться в качестве хранилища на основе памяти. Вы можете скопировать файл для OpenGL.

 Смежные вопросы

  • Нет связанных вопросов^_^