Может кто-нибудь объяснить «ломоть» Quake3? - PullRequest
3 голосов
/ 06 февраля 2009

Я прочитал исходный код и попытался исследовать его онлайн, но я бью кирпичную стену с точки зрения полного понимания.
Под полностью я имею в виду, как это отличается от распределения зоны?

Используются ли "зоны" для маленькой памяти и "ханк" для больших вещей, таких как модели и т. Д .?

Спасибо

1 Ответ

6 голосов
/ 09 февраля 2009

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

Наличие двух (или более!) Таких зон - обычная картина в играх. Для этого есть две причины:

1) Большинство игр предварительно выделяют память, необходимую для запуска, а затем выполняют свои собственные выделения из этого пространства. Это не только может быть быстрее, чем использование распределителя ОС, но и не позволяет ОС перемещать ваши текстуры / геометрию / что угодно на диск. Использование собственного распределителя также облегчает создание кода для отслеживания паттернов памяти и утечек.

2) Хранение небольших и / или динамических выделений в отдельной зоне позволяет избежать фрагментации зоны, которая используется для выделений большего размера. Фрагментация - это то, где предыдущие небольшие выделения оставляли «дыры», в результате чего количество смежного свободного пространства становится меньше, чем общее свободное пространство, и это проклятие игр, которые раздвигают пределы памяти:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...