farheapwalk
Функция Используется для перемещения по глобальному heap
от узла к узлу.
Синтаксис #include<alloc.h>
int farheapwalk(struct farheapinfo *hi);
Файл, содержащий alloc.h
прототип
Описание farheapwalk подразумевает, что память не запорчена.
Для проверки перед использованием farheapwalk,
вызовите farheapcheck. При достижении последнего
блока функция возвращает _HEAPOK. При следующем
вызове farheapwalk, она вернет _HEAPEND.
farheapwalk получает указатель на структуру типа
heapinfo (определена в файле alloc.h). При первом
вызове farheapwalk установите поле hi.ptr в 0.
farheapwalk вернет вам в этом поле адрес первого
блока в heap памяти. Поле hi.size содержит размер
этого блока в байтах. hi.in_use - это флаг, который
устанавливается, если этот блок используется в
настоящий момент.
Возвращемое Если нет глобальной динамической области памяти, то
значение возвращается значение _HEAPEMPTY (1).
Если структура heapinfo содержит верные данные, то
возвращается _HEAPOK (2).
Если достигнут конец heap памяти, то возвращается
_HEAPEND (5).
Переносимость farheapwalk уникальна для DOS. Функция не
совместима с Windows.
Смотрите также heapwalk.
Пример:
#include<stdio.h>
#include<alloc.h>
#define NUM_PTRS 10
#define NUM_BYTES 16
int main(void)
{
struct farheapinfo hi;
char far *array[NUM_PTRS];
int i;
for(i=0; i<NUM_PTRS; i++)
array[i] = farmalloc(NUM_BYTES);
for(i=0; i<NUM_PTRS; i+=2)
farfree(array[i]);
hi.ptr = NULL;
printf(" Размер Статус \n");
printf(" ------ ------ \n");
while(farheapwalk(&hi) == _HEAROK)
if(hi.in_use)
printf("%7u используется\n",hi.size);
else
printf("%7u свободен\n",hi.size);
return 0;
}
|