Farcallo
farcalloc
Функция Выделяет блок памяти в глобальном heap'e.
Синтаксис #include
void far * farcalloc(unsigned long nunits, unsigned long unitsz);
Файл, содержащий alloc.h прототип
Описание Функция farcalloc распределяет память в глобальном heap'e под массив, состоящий из nunits элементов, причем каждый элемент длиной unitsz байтов.
При распределении памяти глобальном heap'e помните следующее:
- может быть распределена вся память с произволь- ной выборкой (ЗУПВ);
- могут быть размещены блоки, размером более 64К;
- для доступа к размещаемым блокам используются "дальние" указатели (с атрибутом "far").
В моделях памяти: компактных, больших и сверх больших, farcalloc соответствует calloc, однако не идентична. Она использует параметр типа long unsigned, в то время, как обычные функции (напри- мер malloc) используют параметры unsigned.
В модели памяти tiny эту функцию использовать нельзя.
Возвращаемое Функция farcalloc возвращает указатель значение на новый блок, или адресный нуль NULL, если для размещения нового блока не хватило памя- ти.
Переносимость Функция уникальна для системы DOS.
Смотрите также
Пример:
#include
#include
#include
#include
int main(void) { char far *fptr; char *str = "Hello"; /* выделить память */ fptr = farcalloc(10,sizeof(char)); if(fptr) { /* скопировать строку "Hello" в выделенный блок памяти. */ /* Замечание. Используется функция movedata, поскольку вы можете работать в малой (small) модели памяти, в которой нельзя использовать функции копирова- ния строки, которые подразумевают, что пара- метры имеют тип near */ movedata(FP_SEG(str),FP_OFF(str),FP_SEG(fptr),FP_OFF(fptr), strlen(str)); /* вывести строку. Обратите внимание на модификатор F*/ printf(" Строка с указателем far: %Fs\n",fptr); /* освободить память */ farfree(fptr); } return 0; }