Хонич А.
Как самому создать трехмерную игру
стр. 27

Здесь мы видим, что, кроме параметра 1еп (размер выделяемого участка), передаются еще два параметра, отсутствующие в функции malloc.

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

tag - номер категории данных. Этот параметр определяет группу данных, для которых вы выделяете участки памяти. Пользоваться этим очень удобно. Например, если вы для временных целей выделяете много раз участки памяти с номером 1:

Adr[i] = zmalloc(len, NULL, 1);

то после того, как данная память вам больше не нужна, вам необязательно столько же раз вызывать функцию zfree, сколько раз вы вызывали zmalloc. В этом случае можно воспользоваться функцией

FreeTags(mt mintag,int maxtag),

где mintag и maxtag с .х ггвстствснно минимальный и максимальный номера категории данных для освобождаемых участков. В нашем конкретном случае это будет выглядеть так:

FreeTags(l,l);

Если значение tag превышает 100, то это говорит о том, что данный участок памяти является кэшируемым, т.е. непостоянным, и программа zmalloc может использовать этот участок для других данных, если для них не найдется свободного места внутри зоны. В случае, когда tag больше 100, наличие второго параметра при вызове функции zmalloc обязательно.

Теперь разберемся, что делает функция ZoneInit().

Во-первых, осуществляется инициализация DPMI памяти:

Новости
Авторы Hellblade: Senua’s Sacrifice удивлены количеству игроков на ПК
В октябре прошлого года студия Ninja Theory рассказала, что продажи Hellblade: Senua's Sacrifice оказались выше, чем ожидали сами разработчики, а уже через месяц они достигли полумиллиона копий.
Хождение по Аду в Agony отнимет у игроков 12 часов
Напомним, что Agony поступит в продажу на PC, PS4 и Xbox One 29 мая. После релиза игры авторы намерены заняться VR-режимом.