Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Гульбахар_sisprog.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
27.39 Кб
Скачать

48.Создание и удаление кучи в Windows

Кучей или пулом памяти называется распределенная процессом область виртуальной памяти, используемая им для захвата и освобождения блоков памяти, размер которых меньше размера виртуальной страницы. процессом. Функции malloc и free из стандартной библиотеки языка программирования С, а также операторы new и delete языка программирования C++ распределяют память из кучи, зарезервированной для процесса по умолчанию.

Дескриптор кучи, созданной для процесса по умолчанию, можно получить при помощи функции GetProcessHeap, которая имеет следующий прототип: HANDLE GetProcessHeap(VOID);

В случае успешного завершения эта функция возвращает дескриптор кучи, а в случае неудачи — значение null.

Кроме того, процесс может создавать кучи динамически во время своей работы. Динамическое создание куч, как правило, направлено на ускорение работы приложения с динамически распределяемой памятью. Эта цель достигается двумя приемами работы с динамически созданной кучей. Во- первых, динамически созданная куча используется удаление кучи??

54.Концепция порта завершения

Порт завершения ввода-вывода — это, фактически, объект синхронизации, который оповещает параллельно работающие потоки о завершении асинхронных операций доступа к файлам или именованным каналам. Поток может узнать о том, что завершилась асинхронная операция ввода- вывода, вызвав функцию GetQueuedCompletionStatus, В КОТОрОЙ указывается дескриптор порта. Если очередь пакетов порта завершения не пуста, то поток получает пакет из этой очереди. Другой особенностью порта завершения является то, что он может получать пакеты не только от системы, по завершении асинхронной операции ввода- вывода, но также и от приложения. Для посылки пакетов в порт завершения предназначена функция PostQueuedCompietionstatus. Этот прием может использоваться для оповещения потоков о внешних событиях.

60.Распределение и освобождение локальной памяти потока

Прежде чем использовать какой-либо указатель из локальной памяти потока, его нужно распределить. Для этой цели используется функция TisAiioc, которая имеет следующий прототип:

DWORD TlsAlloc(VOID);

Эта функция не имеет параметров и в случае успешного завершения возвращает индекс распределенного указателя из локальной памяти потока. При этом распределенный указатель инициализирован в ноль. Если функция закончилась неудачей, то она возвращает -1. Неудача при выполнении этой функции, скорее всего, означает, что локальная память потока исчерпана.

Для освобождения распределенного указателя из локальной памяти потока используется функция TisFree, которая имеет следующий прототип:

BOOL TisFree(

DWORD dwTlsIndex // TLS-индекс

) ;

В случае успешного завершения эта функция возвращает ненулевое значение, а в случае неудачи — FALSE. Единственным параметром этой функции является индекс