CodeNet / Языки программирования / C / C++ / Руководства и справочные материалы по C/C++ / Справочники по функциям / Справочник по библиотечным функциям языка Си
farcalloc - farrealloc - работа с дальней кучей
Описание
farmalloc - Отводит память размером size в дальней
куче.
farcalloc - Отводит память под массив длиной number
элементов, каждый из которых длиной size
байтов, в дальней куче.
farcoreleft - Возвращает величину памяти в дальней ку-
че.
farfree - Освобождает блок памяти memblock, выде-
ленный прежде в дальней куче.
farrealloc - Переопределяет размер ранее загруженного
блока памяти memblock значением newsize.
Заметим, что вся доступная память (RAM) может быть
задействована; может быть выделен блок памяти более
64 Кб и для доступа к блокам памяти используются
дальние указатели.
Эти функции непосредственно обращаются к MS DOS. Они бо-
лее медленны, чем, например, malloc. Они могут также предотв-
ратить переполнение кучи в S, M, T моделях памяти (и полезны
прежде всего для ее расширения). Указатели на загруженную па-
мять должны быть освобождены прежде, чем завершится програм-
ма, в противном случае память останется занятой до перезаг-
рузки компьютера.
Использование
#include <dos.h>
void far *farmalloc(unsigned long size);
void far *farcalloc(unsigned long number, unsigned
long size);
long farcoreleft(void);
void farfree(void far *memblock);
void far *farrealloc(void far *memblock, unsigned long
newsize);
Возвращаемое значение
farmalloc - возвращает дальний указатель на размещен-
ный блок памяти или NULL, если нет доста-
точного количества памяти.
farcalloc - возвращает дальний указатель на загружен-
ный блок памяти или NULL, если нет доста-
точного количества памяти.
farcoreleft - возвращает величину памяти в дальней ку-
че.
farfree - ничего не возвращает.
farrealloc - возвращает адрес перезагруженного блока,
который может быть отличен от исходного.
Пример
#include <stdio.h>
#include <dos.h>
main()
{
char far *memblock;
long allocate = 65000;
printf("%lu байтов памяти свободны\n",farcoreleft());
memblock = farmalloc(allocate);
if (memblock == NULL)
{
printf("не смогли разместить блок памяти\n");
exit(1);
}
printf("%lu байтов отведено", allocate);
printf("%lu байтов памяти свободно\n",farcoreleft());
allocate/=2;
memblock = farrealloc(memblock, allocate);
printf("память переразмещается до %lu байтов",
allocate);
printf("%lu байтов памяти свободно\n",farcoreleft());
farfree(memblock);
printf("блок памяти освобожден");
printf("%lu байтов памяти свободно\n",farcoreleft());
}
Рекомендация
Смотрите также calloc, free, malloc, realloc.
