Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Экзамен / Answers (41-64).docx
Скачиваний:
201
Добавлен:
15.06.2014
Размер:
39.72 Кб
Скачать

Void* malloc(size_t nbytes)

Единственным аргументом этой функции служит число байтов в запрашиваемой области данных, а возвращается указатель на не детализированный тип данных. При невозможности выделить операционной системой заданный объем памяти, эта функция возвращает нулевой указатель (NULL).

Как только запрошенная функцией malloc() область памяти становится ненужной программе, настоятельно рекомендуется отдать приказ об ее освобождении. Для этого освобождения предназначена функция с именем free.

void free(void* ptr)

void* calloc(size_t nelem, size_t nbytes)

и позволяет выделять область данных для размещения массива из nelem элементов, каждый из которых занимает nbytes байтов.

Наконец последняя из перечисленных функций имеет прототип

void* realloc(void* oldptr, size_t newsize)

Она используется для изменения размера дополнительной области памяти, ранее запрошенной у ОС и выделенной ею. При выполнении этой функции исходная область памяти может быть перемещена операционной системой в новое положение, и возвращаемое значение уже не будет совпадать со старым значением oldptr.

47. Системные функции распределения памяти в Windows

В соврем-х архитектурах доступ к страницам памяти ограничивается правами доступа как минимум: чтение и/или запись, доступ для выполнения.

Выделение ОП в Windows включает 2 этапа:

1. to reserve построение таблиц страниц для заданного диапазона адресов;

2. to commit задействовать память, ввести в использование.

Происходит действительное выделение памяти с отметками (занесением слов) в табл. страниц. Для обоих действий общая ф-ия, она возвращает адрес:

VirtualAlloc(void *adr, DWORD size, DWORD type, DWORD protect); adr – желаемый адрес начала блока или NULL, size – размер, type – тип операции(MEM_RESERVE,MEM_COMMIT), protect- PAGE_READONLY,PAGE_READWRITE.

Обратная ф-ия:

VirtualFree(void *adr, DWORD size, DWORD type); type – MEM_DECOMMIT, MEM_RELEASE.

48. Совместное использование оперативной памяти в Windows.

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

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

HANDLE CreateFileMapping(HANDLE hFile, SECURITY_ATTRIBUTES *pFileMappingAttributes, DWORD protect, DWORD MaxSizeHigh, DWORD MaxSizeLow, CTSTR *pName)

Базовый адрес разделяемой памяти получается для использования с помощью функции, имеющий прототип

Void* MapViewOfFile(handle hFileMappingObject, dword DesiredAccess, dword OffsetHigh, dword OffsetLow, dword size)

которая и возвращает требуемый базовый адрес памяти или NULL при невозможности выполнения.

Здесь первый параметр должен быть взят от предыдущего вызова функции CreateFileMapping, предоставляющего хэндл объекта отображения. Третий и четвертый аргументы этой функции совместно задают 64-битное смещение внутри виртуальной области памяти, созданной вызовом функции CreateFileMapping.

После завершения использования разделяемой памяти для освобождения уже ненужных ресурсов следует вызывать функцию UnmapViewOfFile, имеющую прототип

BOOL UnmapViewOfFile( void* pBaseAddress),

передав ей в качестве аргумента базовый адрес разделяемой памяти. Кроме того, в общем случае следует закрыть хэндл объекта отображаемой памяти с помощью функции CloseHandle.

Соседние файлы в папке Экзамен