Хонич А.
Как самому создать трехмерную игру
стр. 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 памяти:

Новости
3-й эпизод Hitman завтра станет бесплатным
Tomorrow the HITMAN: Summer Pack arrives. Giving you access to download Episode 3: Marrakesh.
Разработчики шутера GTFO показали новых врагов-теней в действии
Разработчики продемонстрировали в действии новых врагов-теней.