Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование на C / C++ / Справка функциям С++.doc
Скачиваний:
61
Добавлен:
02.05.2014
Размер:
3.57 Mб
Скачать

Farmalloc

-----------------------------------------------------------------

НазначениеРаспределение памяти из удаленной (far) кучи.

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

Прототип вalloc.h

Замечанияfarmalloc выделяет блок памяти размером size

байт из кучи.

Отметим, что при выделении из кучи:

- может выделяться вся доступная оперативная

память;

- могут выделяться блоки размером более 64 Кб;

- для доступа к распределяемым блокам использу-

ются far-указатели.

В компактной, большой и огромной моделях памяти

данная функция аналогична, хотя и не идентична

функции malloc. Данная функция использует пара-

метры типа unsigned long, в то время как malloc

использует параметры типа unsigned.

Программа крохотной модели памяти не может ис-

пользовать данную функцию, если она преобразо-

ванна в файл с расширением .СОМ .

Возвращаемоеfarmalloc возвращает указатель на выделенный

значениеблок или NULL, если для нового блока нет доста-

точного места.

ПереносимостьУникальна для MS-DOS.

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

malloc

Пример

/*

Работа с кучей памяти

farcoreleft - дает количество оставшейся памяти

farmalloc - распределяет память из кучи

farrealloc - выравнивает распределяемый блок в

куче

farfree - освобождает кучу

*/

#include<stdio.h>

#include<alloc.h>

main()

{

char far *block;

long size = 65000;

/* Найти, сколько здесь осталось*/

printf("%lu байт свободно", farcoreleft());

/* Взять часть кучи */

block = farmalloc(size);

if (block == NULL)

{

printf("Невозможно выделить\n");

exit(1);

}

printf("%lu байт выделено ", size);

printf("%lu байт свободно\n", farcoreleft());

/* Перераспределить блок */

size /= 2;

block = farrealloc(block, size);

printf("блок теперь перераспределен на %lu "

" байт,",size);

printf("%lu байт свободно\n", farcoreleft());

/* Теперь освободим все */

printf("Освободить блок\n");

farfree(block);

printf("Блок освобожден,");

printf("%lu байт свободно\n", farcoreleft());

} /* Конец */

Результат выполнения программы

359616 байт свободно

65000 байт распределено, 294608 байт свободно

блок теперь перераспределен на 32500 байт,

262100 байт свободно

Освободить блок

Блок освобожден, 359616 байт свободно

-----------------------------------------------------------------