Выделите большие блоки непрерывной памяти - делать или нет?

Я всегда был убежден, что выделять большие блоки непрерывной памяти не очень хорошая практика. Ясно, что вы можете столкнуться с проблемами, если в игру вступит фрагментация памяти, которая в большинстве случаев не может быть исключена наверняка (особенно в больших проектах, разработанных как сервисы или тому подобное).

Недавно я наткнулся на библиотеку обработки изображений ITK и понял, что они (фактически) всегда выделяют данные изображения (даже 3D - которые могут быть огромными) как один непрерывный блок. Мне сказали, что это не должно быть проблемой, по крайней мере для 64-битных процессов. Однако я не вижу систематической разницы между 64-битными и 32-битными процессами, кроме того факта, что проблемы с памятью могут возникать из-за большего виртуального адресного пространства.

В заключение: мне интересно, что является хорошей практикой при работе с большими объемами данных: просто распределить их как один большой блок или лучше разделить на более мелкие части для распределения?

Как Вопрос, конечно, довольно специфичен для системы, я хотел бы ограничить его родным (неуправляемым, без CLR) C ++, особенно под Windows. Тем не менее, я был бы также заинтересован в каких-либо более общих комментариях - если это возможно.

10
задан Jakob S. 3 July 2012 в 07:58
поделиться