Динамическое распределение памяти

Динамическое распределение памяти

Библиотека языка Си предоставляет механизм распределения динамической памяти (heap). Этот механизм позволяет динамически (по мере возникновения необходимости) запрашивать из программы дополнительные области оперативной памяти.

Работа функций динамического распределения памяти различается для различных моделей памяти, поддерживаемых системой программирования (смотри первую части книги).

В малых моделях памяти (tiny, small, medium) доступно для использования все пространство между концом сегмента статических данных программы и вершиной программного стека, за исключением 256-байтной буферной зоны непосредственно около вершины стека.

В больших моделях памяти (compact, large, huge) все пространство между стеком программы и верхней границей физической памяти доступно для динамического размещения памяти.

Следующие функции используются для динамического распределения памяти:

Функция Краткое описание
calloc выделить память для массива
free освободить блок, полученный посредством функции calloc, malloc или realloc
malloc выделить блок памяти
realloc переразместить ранее выделенный блок памяти, изменив его размер
sbrk переустановить адрес первого байта оперативной памяти, недоступного программе (начала области памяти вне досягаемости программы)

Система программирования MSC предоставляет дополнительно функции:

Функция Краткое описание
alloca выделение блока памяти из программного стека
_expand изменение размера блока памяти, не меняя местоположения блока
_ffree освобождение блока, выделенного посредством функции fmalloc
_fmalloc выделение блока памяти вне данного сегмента
_freect определить примерное число областей заданного размера, которые можно выделить
_fmsize возвращает размер блока памяти, на который указывает дальний (far) указатель
halloc выделить память для большого массива (объемом более 64 Кбайтов)
hfree освободить блок памяти, выделенный посредством функции halloc
_memavl определить примерный размер в байтах памяти, доступной для выделения
_msize определить размер блока, выделенного посредством функций calloc, malloc, realloc
_nfree освобождает блок, выделенный посредством _nmalloc
_nmalloc выделить блок памяти в заданном сегменте
_nmsize определить размер блока, на которой указывает близкий (near) указатель
stackavail определить объем памяти, доступной для выделения посредством функции alloca

Система программирования ТС предоставляет дополнительно функции:

Функция Краткое описание
brk переустановить адрес первого байта оперативной памяти, недоступного программе (начала области памяти вне досягаемости программы)
allocmem низкоуровневая функция выделения памяти
freemem низкоуровневая функция возврата памяти операционной системе
coreleft узнать, сколько осталось памяти для выделения в данном сегменте
farcalloc выделить блок памяти вне данного сегмента
farcoreleft определить, сколько памяти для размещения осталось вне данного сегмента
farmalloc выделить блок памяти вне данного сегмента
farrealloc изменить размер блока, ранее выделенного функцией farmalloc или farcalloc
farfree освободить блок, ранее выделенный функцией farmalloc или farcalloc

Прототипы функций содержатся в файле malloc.h для системы программирования MSC и в файле alloc.h для системы программирования ТС.

Функции calloc и malloc выделяют блоки памяти, функция malloc выделяет заданное число байтов, тогда как calloc выделяет и инициализирует нулями массив элементов заданного размера.

Функции _fmalloc и _nmalloc подобны malloc, за исключением того, что _fmalloc и _nmalloc позволяют выделить блок байтов в том случае, когда существуют ограничения адресного пространства текущей модели памяти. Функция halloc выполняется аналогично calloc, но halloc выделяет память для большого массива (больше 64 К).

Функции realloc и _expand изменяют размер полученного блока.

Функция free (для calloc, malloc и realloc), функция ffree (для _fmalloc), функция _nfree (для _nmalloc) и функция hfree (для halloc) освобождают память, которая была выделена ранее, и делают ее доступной для последующего распределения.

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

Функции _msize (для calloc, malloc, realloc и _expand), _fmsize (для _fmalloc) и _nmsize (для _nmalloc) возвращают размер ранее выделенного блока памяти.

Функция sbrk — это функция нижнего уровня для получения памяти. Вообще говоря, программа, которая использует функцию sbrk, не должна использовать другие функции выделения памяти, хотя их использование не запрещено.

Все выше описанные функции распределяли области памяти из общей памяти. Система программирования MSC предоставляет 2 функции, alloca и stackavail, для выделения памяти из стека и определения количества доступной памяти в стеке.

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг

1.5.3 Распределение памяти

Из книги Архитектура операционной системы UNIX автора Бах Морис Дж

1.5.3 Распределение памяти Ядро постоянно располагается в оперативной памяти, наряду с выполняющимся в данный момент процессом (или частью его, по меньшей мере). В процессе компиляции программа-компилятор генерирует последовательность адресов, являющихся адресами


9 РАСПРЕДЕЛЕНИЕ РЕСУРСОВ ДЛЯ ДОКУМЕНТИРОВАНИЯ

Из книги ИНФОРМАЦИОННАЯ ТЕХНОЛОГИЯ. РУКОВОДСТВО ПО УПРАВЛЕНИЮ ДОКУМЕНТИРОВАНИЕМ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ автора Автор неизвестен

9 РАСПРЕДЕЛЕНИЕ РЕСУРСОВ ДЛЯ ДОКУМЕНТИРОВАНИЯ Основными ресурсами, требуемыми для документирования, являются следующие:персонал (см. 9.1);средства (см. 9.2);финансирование (см.


Выравнивание и распределение

Из книги Photoshop. Мультимедийный курс автора Мединов Олег

Выравнивание и распределение Когда активен инструмент Перемещение, на панели под строкой меню появляется набор кнопок для выравнивания и распределения изображений и объектов (рис. 9.1). Рис. 9.1. Кнопки выравниванияПиктограммы на кнопках подсказывают, как будут


Распределение

Из книги Pinnacle Studio 11 автора Чиртик Александр Анатольевич

Распределение Для одного или нескольких выделенных объектов или их групп можно задать одно из девяти предопределенных положений (то есть применить автоматическое распределение). Чтобы применить к группе объектов распределение, выделите нужные объекты и нажмите кнопку


Выравнивание и распределение

Из книги Adobe InDesign CS3 автора Завгородний Владимир

Выравнивание и распределение В тех случаях, когда необходимо расположить объекты с высокой точностью по отношению друг к другу (например, ровно в ряд на равном расстоянии), но точность расположения на странице не требуется, мы можем прибегнуть к процедурам выравнивания и


Распределение памяти

Из книги Microsoft Visual C++ и MFC. Программирование для Windows 95 и Windows NT автора Фролов Александр Вячеславович

Распределение памяти Стандартная библиотека компиляторов содержит специальные функции управления памятью – malloc, free, а также другие разновидности этих функций. Они позволяют получить для использования блок оперативной памяти, и затем отдать его обратно операционной


Распределение программ по главам

Из книги Системное программирование в среде Windows автора Харт Джонсон М

Распределение программ по главам В каталоге каждой главы содержатся все программы, относящиеся к данной главе (за исключением тех, которые были помещены в каталог Utility), а также всевозможные дополнительные программы. Соответствующий их перечень, сопровождаемый кратким


Динамическое распределение IP-адресов

Из книги Сетевые средства Linux автора Смит Родерик В.

Динамическое распределение IP-адресов Наиболее просто устанавливается конфигурация сервера DHCP, предполагающая динамическое распределение IP-адресов. В этом случае сервер сам решает, какой адрес следует выделить компьютеру, который обратился к нему. IP-адреса для


Распределение текстур

Из книги Приемы создания интерьеров различных стилей автора Тимофеев С. М.

Распределение текстур Мы рассмотрели общие основы создания и наложения текстур на объекты. Наверняка вы уже успели столкнуться с необходимостью распределения текстур по поверхности объекта. Подобная необходимость возникает при текстурировании постоянно. Дело в том,


Распределение графики по слоям

Из книги Macromedia Flash Professional 8. Графика и анимация автора Дронов В. А.

Распределение графики по слоям Иногда бывает нужно "разбросать" фрагменты изображения, находящиеся в одном слое, по разным слоям. В терминологии Flash эта операция называется распределением графики по слоям. При этом Flash сам создаст нужное количество слоев и переместит на


Распределение функций

Из книги Firebird РУКОВОДСТВО РАЗРАБОТЧИКА БАЗ ДАННЫХ автора Борри Хелен

Распределение функций Модель клиент-сервер позволяет отдельным фрагментам работы системы быть эффективно распределенными между компонентами аппаратуры и программного обеспечения. Сервер базы данных заботится о хранении, управлении и поиске данных, а через хранимые


РАСПРЕДЕЛЕНИЕ ПАМЯТИ: malloc( ) И са11ос( )

Из книги Язык Си - руководство для начинающих автора Прата Стивен

РАСПРЕДЕЛЕНИЕ ПАМЯТИ: malloc( ) И са11ос( )      Ваша программа должна предоставить достаточный объем памяти для запоминания используемых данных. Некоторые из этих ячеек памяти распределяются автоматически. Например, мы можем объявить char place[ ] = "Залив Свиной печенки";и будет


2.2. Динамическое выделение памяти и указатели

Из книги C++ для начинающих автора Липпман Стенли

2.2. Динамическое выделение памяти и указатели Прежде чем углубиться в объектно-ориентированную разработку, нам придется сделать небольшое отступление о работе с памятью в программе на С++. Мы не сможем написать сколько-нибудь сложную программу, не умея выделять память


Помидоры и распределение времени

Из книги Идеальный программист. Как стать профессионалом разработки ПО автора Мартин Роберт С.

Помидоры и распределение времени Для управления своим временем и концентрацией я также использую чрезвычайно эффективный помидорный метод планирования.[41] Основная идея очень проста: вы ставите стандартный кухонный таймер (традиционно такие таймеры оформляются в виде