farmalloc

 Функция            Размещает данные в области глобального heap.

 Синтаксис          #include
                    void far * farmalloc(unsigned long nbytes);

 Файл, содержащий   alloc.h
 прототип

 Описание           Функция farmalloc выделяет блок в глобальном heap,
                    размер блока в байтах передается в аргументе
                    nbytes.

                    При распределении глобального heap помните следую-
                    щее:

                    - может быть распределена вся память с произволь-
                      ной выборкой (ЗУПВ);

                    - могут быть размещены блоки, размером более 64К;

                    - для доступа к размещаемым блокам используются
                      "дальние" указатели (с атрибутом "far").


                    В моделях памяти: компактных, больших и сверх
                    больших, функция соответствует, однако не идентич-
                    на, malloc. Она получает параметр типа long
                    unsigned, в то время, как malloc использует пара-
                    метр типа unsigned.

                    В модели памяти tiny эту функцию использовать
                    нельзя.

 Возвращаемое       Функция farmalloc возвращает указатель на
 значение           новый выделенный блок или нуль, если для
                    размещения нового блока не хватило памяти.

 Переносимость      Функция уникальна для системы DOS.

 Смотрите также     farcalloc farcoreleft farfree farrealloc malloc

 Пример:

 #include
 #include
 #include
 #include

 int main(void)
 {
    char far *fptr;
    char *str = "Hello";
    /* выделить память */
    fptr = farmalloc(10);
    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;
 }