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.