Функция Выделяет блок памяти в глобальном 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.
Смотрите также callocfarcoreleftfarfreefarmallocmalloc
Пример:
#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;
}