Unity 6.3
0 онлайн 46 гостей 3 в системе
Вход

Пример динамического распределителя стека

Предварительные условия

В примерах используются отчеты об использовании памяти, которые Unity записывает в журнал при закрытии Проигрывателя или Unity Editor. Для создания этих отчетов используйте аргумент командной строки -log-memory-performance-stats. Чтобы найти файлы журнала проекта, следуйте инструкциям на странице файлов журнала.

Пример отчета об использовании

Пример отчета об использовании динамического распределителя кучи выглядит следующим образом:

[ALLOC_DEFAULT_MAIN]
Peak usage frame count: [16.0 MB-32.0 MB]: 497 frames, [32.0 MB-64.0 MB]: 1 frames
Requested Block Size 16.0 MB
Peak Block count 2
Peak Allocated memory 54.2 MB
Peak Large allocation bytes 40.2 MB

В этом примере Двухуровневая сегрегация (TLSF) размер блока равен 16 МБ, и Unity выделила два блока. Пиковое потребление аллокатора составило 54.2 МБ. Из этих 52.4 МБ 40.2 МБ были выделены не в блоке TLSF, а в виртуальной памяти. В большинстве кадров выделялось от 16 до 32 МБ, а в одном кадре — вероятно, кадре загрузки — пик составил от 32 до 64 МБ.

Если увеличить размер блока, крупное выделение останется в динамической куче, а не уйдёт в виртуальную память. Однако такой размер блока может привести к потере памяти, поскольку блоки могут использоваться не полностью.

Дерево типов и распределители кэша файлов используют динамическое выделение стека. Чтобы сохранить блоки памяти, которые они могли бы использовать при этом алгоритме, можно установить размер блока дерева типов и размер блока кэша файлов на 0. Распределения, которые использовали бы дерево типов и кэш, вместо этого возвращаются к основному распределителю.

Однако, уменьшение размера блока до 0 чревато риском увеличения фрагментации памяти. См. Настройка распределителей, чтобы узнать, как установить эти размеры блоков.

Дополнительные ресурсы