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.

 Смотрите также     calloc farcoreleft farfree farmalloc malloc

 Пример:

 #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;
 }