Функции winapi для работы с памятью
Кучи (heaps) – это динамически распределяемые области данных. При порождении процесса ему предоставляется куча размером 1 Мбайт по умолчанию. Ее размер может изменяться параметром /HEAP при построении исполняемого модуля. Функции библиотеки времени исполнения компилятора CRT (malloc(), free() и т. д.) используют возможности куч.
Создание дополнительных «куч»:
- для повышения эффективности управления памятью;
- для уменьшения рабочего множества процесса ;
- для повышения эффективности работы многонитевых приложений;
- для “защиты” друг от друга различных структур данных;
- для быстрого освобождение всей памяти в куче.
Повышение эффективности управления памятью:
В системах со страничной организацией отсутствует проблема фрагментации физической памяти. Однако существует проблема фрагментации адресного пространства. В 4Gb адресном пространстве эта проблема не актуальна, но она имеет значение в 1Mb куче. Если элементы какой-либо структуры имеют один размер, а элементы другой структуры - другой размер, то полезно размещать эти структуры в разных кучах.
Уменьшение рабочего множества процесса:
В соответствии с принципом локальности, работа с разными структурами, чаще всего, происходит не одновременно. Границы элементов разных структур не выровнены на границу страницы. Обращение к элементам одной структуры вызывает подкачку всей страницы, а, значит и элементов другой структуры. Это увеличивает рабочее множество процесса.
Функции создания и использования «куч»:
HANDLE GetProcessHeap (VOID ) – для получения дескриптора кучи по умолчанию;
LPVOID HeapAlloc (HANDLE hHeap, DWORD dwFlags, DWORD dwSize) – для выделения из кучи блока памяти заданного размера и возвращения указателя;
LPVOID HeapReAlloc (HANDLE hHeap, DWORD dwFlags, LPVOID lpOldBlock, DWORD dwSize) – для изменения размера выделенного блока памяти с возможностью перемещения блока при необходимости;
BOOL HeapFree (HANDLE hHeap, DWORD dwFlags, LPVOID lpMem) – для освобождения выделенного блока памяти кучи.
Создание и уничтожение «кучи»:
HANDLE HeapCreate (
BOOL HeapDestroy ( HANDLE hHeap);
Создание «кучи» - dwFlags:
HEAP_GENERATE_EXCEPTIONS – указывает системе на то, что в случае возникновения ошибки необходимо генерировать исключительную ситуацию. Это будет происходить во всех случаях, когда функция должна была бы возвратить значение null.
HEAP_NO_SERIALIZE – указывает, что пока выполняется текущий вызов HeapAlloc, к куче не будут происходить обращения из других потоков (т.е. программист сам берет на себя исключение ситуаций одновременных обращений).
HEAP_ZERO_MEMORY – указывает, что выделяемая память должна инициализироваться нулями. В противном случае память не обязательно инициализируется нулями.
Дополнительные возможности по управлению «кучами»
UINT HeapCompact (HANDLE hHeap, DWORD fdwFlags);
BOOL HeapLock (HANDLE hHeap);
BOOL HeapUnlock (HANDLE hHeap);
BOOL HeapWalk (HANDLE hHeap, PPROCESS_HEAP_ENTRY pHeapEntry);
Архитектура памяти в MS Windows 2000-2003. Проецируемые файлы, назначение и использование. Функции Win32 API.
Проецируемые файлы.
“Как и виртуальная память, проецируемые файлы позволяют резервировать регион адресного пространства и передавать ему физическую память. Различие между этими механизмами состоит в том, что в последнем случае физическая память не выделяется из системного страничного файла, а берется из файла, уже находящегося на диске. Как только файл спроецирован в память, к нему можно обращаться так, как будто он в нее целиком загружен.”
(Джеффри Рихтер. Windows для профессионалов.)
Файлы, проецируемые (отображаемые) в память, - это один из самых замечательных сервисов, которые Win32 предоставляет программисту. Его существование стирает для программиста грань между оперативной и дисковой памятью. Действительно, с точки зрения классической теории кэш, оперативная память и дисковое пространство - это три вида памяти, отличающиеся скоростью доступа и размером. Но если заботу о перемещении данных между кэшем и ОП берут на себя процессор и ОС, то перемещение данных между ОП и диском обычно выполняет прикладной процесс с использованием функций read() и write().
Win32 действует иначе: ОС берет на себя заботу о перемещении страниц адресного пространства процесса, находящихся в файле подкачки, причем в качестве файла подкачки может быть использован любой файл. Иначе говоря, страницы ВП любого процесса могут быть помечены как выгруженные, а в качестве места, куда они выгружены, может быть указан файл. Теперь при обращении к такой странице VMM произведет ее загрузку, используя стандартный механизм свопинга. Это позволяет работать с произвольным файлом как с регионом памяти.
Применение проецируемых файлов:
· Для запуска исполняемых файлов (EXE) и динамически связываемых библиотек (DLL).
· Для работы с файлами.
· Для одновременного использования одной области данных двумя процессами.
Запуск процесса:
1. Создать виртуальное адресное пространство процесса (размером 4Gb).
2. Резервировать в ВАП регион размером, достаточным для размещения исполняемого файла. Начальный адрес региона определяется в заголовке EXE-модуля. Обычно он равен 0x00400000.
3. Отобразить исполняемый файл на зарезервированное адресное пространство.
4. Таким же образом отобразить на ВАП процесса необходимые ему динамически связываемые библиотеки. Информация о необходимых библиотеках находится в заголовке EXE-модуля. Желательное расположение региона адресов описано внутри библиотеки.
Запуск EXE-файлов и DLL-библиотек
Одновременное использование одной области данных двумя процессами
Файлы данных, проецируемые в память
Проецирование файла данных в память:
1. Создается объект ядра “файл”. Для создания объекта “файл” используется функция CreateFile.
2. С помощью функции CreateFileMapping создается объект ядра “проецируемый файл”. При этом используется дескриптор файла, возвращенный функцией CreateFile.
3. Производится отображение объекта “проецируемый файл” или его части на адресное пространство процесса. Для этого применяется функция MapViewOfFile.
Завершение проецирования файла данных:
1. Выполняется открепление файла от адресного пространства процесса с помощью функции UnmapViewOfFile.
2. Выполняется уничтожение объектов “файл” и “проецируемый файл” с помощью функции CloseHandle.
Обеспечение когерентности:
Если один процесс меняет разделяемую область данных, то она меняется и для другого процесса. Операционная система обеспечивает когерентность разделяемой области данных для всех процессов. Но для обеспечения когерентности процессы должны работать с одним объектом “проецируемый файл”, а не с одним файлом.
Создание объекта «проецируемый файл»:
HANDLE CreateFileMapping (
HANDLE hFile, // дескриптор файла
LPSECURITY_ATTRIBUTES lpAttributes, // атрибуты защиты объекта
DWORD flProtect, // атрибуты защиты
DWORD dwMaximumSizeHigh, // старшее слово размера
DWORD dwMaximumSizeLow, // младшее слово размера
LPCTSTR lpName // имя объекта
Открытие объекта «проецируемый файл»:
HANDLE OpenFileMapping (
DWORD dwDesiredAccess, // режим доступа
BOOL bInheritHandle, // флажок наследования
LPCTSTR lpName // имя объекта
Функция проецирования области:
LPVOID MapViewOfFile (
HANDLE hFileMappingObject, // дескриптор объекта проецируемый файл
DWORD dwDesiredAccess, // режим доступа
DWORD dwFileOffsetHigh, // старшее DWORD смещения
DWORD dwFileOffsetLow, // младшее DWORD смещения
SIZE_T dwNumberOfBytesToMap // число отображаемых байтов
Функция проецирования области по определенному адресу:
LPVOID MapViewOfFileEx (
HANDLE hFileMappingObject, // дескриптор отображаемого объекта
DWORD dwDesiredAccess, // режим доступа
DWORD dwFileOffsetHigh, // старшее DWORD смещения
DWORD dwFileOffsetLow, // младшее DWORD смещения
SIZE_T dwNumberOfBytesToMap, // число отображаемых байтов
LPVOID lpBaseAddress // начальный адрес
Параметр dwDesiredAccess определяет требуемый режим доступа для страниц ВП, используемых для отображения:
· FILE_MAP_WRITE– доступ к операциям чтения-записи, проецируемый файл должен быть создан с защитой PAGE_READWRITE.
· FILE_MAP_READ – доступ только для чтения, проецируемый файл должен быть создан с защитой PAGE_READWRITE или PAGE_READONLY.
· FILE_MAP_ALL_ACCESS – то же самое, что и FILE_MAP_WRITE.
· FILE_MAP_COPY – копирование при доступе для записи, проецируемый файл должен создаваться с флажком защиты PAGE_WRITECOPY.
· FILE_MAP_EXECUTE – доступ к исполнению кода из отображаемой памяти , проецируемый файл должен быть создан с доступом PAGE_EXECUTE_READWRITE или PAGE_EXECUTE_READ.
Функция отмены проецирования области:
BOOL UnmapViewOfFile (
LPCVOID lpBaseAddress // начальный адрес
Создание и использование проецируемых файлов:
Общий механизм таков: один процесс создает объект “проецируемый файл” с помощью функции CreateFileMapping, передавая в параметре lpName имя объекта, которое является глобальным в системе. Другой процесс открывает уже созданный объект “проецируемый файл” по глобальному имени.Теперь два процесса могут совместно использовать объект “проецируемый файл”. При этом, при помощи функции MapViewOfFile каждый процесс проецирует этот объект на свое ВАП и используют эту часть адресного пространства как разделяемую область данных.
Механическое удерживание земляных масс: Механическое удерживание земляных масс на склоне обеспечивают контрфорсными сооружениями различных конструкций.
Папиллярные узоры пальцев рук - маркер спортивных способностей: дерматоглифические признаки формируются на 3-5 месяце беременности, не изменяются в течение жизни.
Организация стока поверхностных вод: Наибольшее количество влаги на земном шаре испаряется с поверхности морей и океанов (88‰).
Поперечные профили набережных и береговой полосы: На городских территориях берегоукрепление проектируют с учетом технических и экономических требований, но особое значение придают эстетическим.
© cyberpedia.su 2017-2020 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!
Эти функции используются в сопоставлении файлов.
Функция | Описание |
---|---|
CreateFileMappingA | Создает или открывает именованный или неименованный объект сопоставления файлов для указанного файла. |
CreateFileMappingW | Создает или открывает именованный или неименованный объект сопоставления файлов для указанного файла. |
CreateFileMapping2 | Создает или открывает именованный или неименованный объект сопоставления файлов для указанного файла. Можно указать предпочтительный узел NUMA для физической памяти в качестве расширенного параметра; см. параметр ExtendedParameters . |
CreateFileMappingFromApp | Создает или открывает именованный или неименованный объект сопоставления файлов для указанного файла из приложения магазина Windows. |
CreateFileMappingNuma | Создает или открывает именованный или неименованный объект сопоставления файлов для указанного файла и задает узел NUMA для физической памяти. |
FlushViewOfFile | Записывает на диск диапазон байтов в сопоставленном представлении файла. |
GetMappedFileName | Проверяет, находится ли указанный адрес в файле, сопоставленном с памятью, в адресном пространстве указанного процесса. В этом случае функция возвращает имя сопоставленного в памяти файла. |
MapViewOfFile | Карты представление сопоставления файлов в адресное пространство вызывающего процесса. |
MapViewOfFile2 | Карты представление файла или раздела, поддерживаемого файлом, в адресное пространство указанного процесса. |
MapViewOfFile3 | Карты представление файла или раздела, поддерживаемого файлом, в адресное пространство указанного процесса. |
MapViewOfFile3FromApp | Карты представление сопоставления файлов в адресное пространство вызывающего процесса из приложения магазина Windows. |
MapViewOfFileEx | Карты представление сопоставления файлов в адресное пространство вызывающего процесса. Вызывающий объект может дополнительно указать предлагаемый адрес памяти для представления. |
MapViewOfFileExNuma | Карты представление сопоставления файлов в адресное пространство вызывающего процесса и указывает узел NUMA для физической памяти. |
MapViewOfFileFromApp | Карты представление сопоставления файлов в адресное пространство вызывающего процесса из приложения магазина Windows. |
MapViewOfFileNuma2 | Карты представление файла или раздела, поддерживаемого файлом, в адресное пространство указанного процесса. |
OpenFileMapping | Открывает именованный объект сопоставления файлов. |
OpenFileMappingFromApp | Открывает именованный объект сопоставления файлов. |
UnmapViewOfFile | Распакует сопоставленное представление файла из адресного пространства вызывающего процесса. |
UnmapViewOfFile2 | Распакует ранее сопоставленное представление файла или раздела, поддерживаемого файлом подкачки. |
UnmapViewOfFileEx | Распакует ранее сопоставленное представление файла или раздела, поддерживаемого файлом подкачки. |
Функции thunk ATL
Функция | Описание |
---|---|
AtlThunk_AllocateData | Выделяет место в памяти для thunk ATL. |
AtlThunk_DataToCode | Возвращает исполняемую функцию, соответствующую параметру AtlThunkData_t. |
AtlThunk_FreeData | Освобождает память, связанную с блоком ATL. |
AtlThunk_InitData | Инициализирует thunk ATL. |
Глобальные и локальные функции
Также см. глобальные и локальные функции. Эти функции предоставляются для совместимости с 16-разрядными Windows и используются с динамическими данными Exchange (DDE), функциями буфера обмена и объектами данных OLE. Если в документации не указано, что должна использоваться глобальная или локальная функция, новые приложения должны использовать соответствующую функцию кучи с дескриптором , возвращенным GetProcessHeap. Для эквивалентной функции глобальной или локальной функции задайте для параметра dwFlags функции кучи значение 0.
Функция | Описание | Соответствующая функция кучи |
---|---|---|
GlobalAlloc, LocalAlloc | Выделяет указанное число байтов из кучи. | HeapAlloc |
GlobalDiscard, LocalDiscard | Удаляет указанный глобальный блок памяти. | Неприменимо. |
GlobalFlags, LocalFlags | Возвращает сведения о указанном объекте глобальной памяти. | Неприменимо. Используйте HeapValidate для проверки кучи. |
GlobalFree, LocalFree | Освобождает указанный глобальный объект памяти. | HeapFree |
GlobalHandle, LocalHandle | Извлекает дескриптор, связанный с указанным указателем на глобальный блок памяти. Эту функцию следует использовать только с функциями OLE и буфера обмена, которые требуют ее. | Неприменимо. |
GlobalLock, LocalLock | Блокирует глобальный объект памяти и возвращает указатель на первый байт блока памяти объекта. | Неприменимо. |
GlobalReAlloc, LocalReAlloc | Изменяет размер или атрибуты указанного объекта глобальной памяти. | HeapReAlloc |
GlobalSize, LocalSize | Извлекает текущий размер указанного объекта глобальной памяти. | Куча |
GlobalUnlock, LocalUnlock | Уменьшает количество блокировок, связанных с объектом памяти. Эту функцию следует использовать только с функциями OLE и буфера обмена, которые требуют ее. | Неприменимо. |
ATL thunk functions
Function | Description |
---|---|
AtlThunk_AllocateData | Allocates space in memory for an ATL thunk. |
AtlThunk_DataToCode | Returns an executable function corresponding to the AtlThunkData_t parameter. |
AtlThunk_FreeData | Frees memory associated with an ATL thunk. |
AtlThunk_InitData | Initializes an ATL thunk. |
Устаревшие функции
Эти функции предоставляются только для совместимости с 16-разрядными версиями Windows:
Приведенная ниже функция может возвращать неверные сведения и не должна использоваться. Вместо этого используйте функцию GlobalMemoryStatusEx .
These functions are used with Data Execution Prevention (DEP).
Function | Description |
---|---|
GetProcessDEPPolicy | Retrieves DEP settings for a process. |
GetSystemDEPPolicy | Retrieves DEP settings for the system. |
SetProcessDEPPolicy | Changes DEP settings for a process. |
Функции AWE
Функция | Описание |
---|---|
AllocateUserPhysicalPages | Выделяет страницы физической памяти для сопоставления и отмены сопоставления в любом регионе AWE процесса. |
AllocateUserPhysicalPagesNuma | Выделяет страницы физической памяти для сопоставления и распакованного в любой области AWE процесса и задает узел NUMA для физической памяти. |
FreeUserPhysicalPages | Освобождает страницы физической памяти, выделенные ранее с помощью AllocateUserPhysicalPages. |
MapUserPhysicalPages | Карты ранее выделенные страницы физической памяти по указанному адресу в регионе AWE. |
MapUserPhysicalPagesScatter | Карты ранее выделенные страницы физической памяти по указанному адресу в регионе AWE. |
Bad memory functions
Function | Description |
---|---|
BadMemoryCallbackRoutine | An application-defined function registered with the RegisterBadMemoryNotification function that is called when one or more bad memory pages are detected. |
GetMemoryErrorHandlingCapabilities | Gets the memory error handling capabilities of the system. |
RegisterBadMemoryNotification | Registers a bad memory notification that is called when one or more bad memory pages are detected. |
UnregisterBadMemoryNotification | Closes the specified bad memory notification handle. |
File mapping functions
These functions are used in file mapping.
Function | Description |
---|---|
CreateFileMappingA | Creates or opens a named or unnamed file-mapping object for a specified file. |
CreateFileMappingW | Creates or opens a named or unnamed file-mapping object for a specified file. |
CreateFileMapping2 | Creates or opens a named or unnamed file mapping object for a specified file. You can specify specify a preferred NUMA node for the physical memory as an extended parameter; see the ExtendedParameters parameter. |
CreateFileMappingFromApp | Creates or opens a named or unnamed file-mapping object for a specified file from a Windows Store app. |
CreateFileMappingNuma | Creates or opens a named or unnamed file-mapping object for a specified file, and specifies the NUMA node for the physical memory. |
FlushViewOfFile | Writes to the disk a byte range within a mapped view of a file. |
GetMappedFileName | Checks whether the specified address is within a memory-mapped file in the address space of the specified process. If so, the function returns the name of the memory-mapped file. |
MapViewOfFile | Maps a view of a file mapping into the address space of a calling process. |
MapViewOfFile2 | Maps a view of a file or a pagefile-backed section into the address space of the specified process. |
MapViewOfFile3 | Maps a view of a file or a pagefile-backed section into the address space of the specified process. |
MapViewOfFile3FromApp | Maps a view of a file mapping into the address space of a calling process from a Windows Store app. |
MapViewOfFileEx | Maps a view of a file mapping into the address space of a calling process. A caller can optionally specify a suggested memory address for the view. |
MapViewOfFileExNuma | Maps a view of a file mapping into the address space of a calling process, and specifies the NUMA node for the physical memory. |
MapViewOfFileFromApp | Maps a view of a file mapping into the address space of a calling process from a Windows Store app. |
MapViewOfFileNuma2 | Maps a view of a file or a pagefile-backed section into the address space of the specified process. |
OpenFileMapping | Opens a named file-mapping object. |
OpenFileMappingFromApp | Opens a named file-mapping object. |
UnmapViewOfFile | Unmaps a mapped view of a file from the calling process's address space. |
UnmapViewOfFile2 | Unmaps a previously mapped view of a file or a pagefile-backed section. |
UnmapViewOfFileEx | Unmaps a previously mapped view of a file or a pagefile-backed section. |
Obsolete Functions
These functions are provided only for compatibility with 16-bit versions of Windows:
The function below can return incorrect information, and should not be used. Instead, use the GlobalMemoryStatusEx function.
Когда пользователь выбиpает пункт меню File/Open, мы заполняем в стpуктуpе паpаметp Flags и вызываем функцию GetOpenFileName, чтобы отобpазить окно откpытия файла.
После того, как пользователь выбеpет файл для откpытия, мы вызываем CreateFile, чтобы откpыть файл. Мы указываем, что функция должна попpобовать откpыть файл для чтения и записи. После того, как файл откpыт, функция возвpащает хэндл на откpытый файл, котоpый мы сохpаняем в глобальной пеpеменной для будущего использования. Эта функция имеет следующий синтаксис:
- dwDesireAccess указывает, какую опеpацию вы хотите выполнить над файлом.
- Откpыть файл для пpовеpки его аттpибутов. Вы можете писать и читать из файла.
- GENERIC_READ Откpыть файл для чтения.
- GENERIC_WRITE Откpыть файл для записи.
- 0 Hе pазделять файл с дpугими пpоцессами.
- FILE_SHARE_READ позволяет дpугим пpоцессам пpочитать инфоpмацию из файла, котоpый был откpыт
- FILE_SHARE_WRITE позволяет дpугим пpоцессам записывать инфоpмацию в откpытый файл.
- CREATE_NEW Создание нового файла, если файла не существует.
- CREATE_ALWAYS Создание нового файла. Функция пеpезаписывает файл, если он существует.
- OPEN_EXISTING Окpытие существующего файла.
- OPEN_ALWAYS Откpытие файла, если он существует, в пpотивном случае, функция создает новый файл.
- TRUNCATE_EXISTING Откpытие файла и обpезание его до нуля байтов. Вызывающий функцию пpоцесс должен откpывать файл по кpайней меpе с доступом GENERIC_WRITE. Если файл не существует, функция не сpабатывает.
- FILE_ATTRIBUTE_ARCHIVE Файл является аpхивным файлом. Пpиложения используют этот аттpибут для бэкапа или удаления.
- FILE_ATTRIBUTE_COMPRESSED Файл или диpектоpия сжаты. Для файла это означает, что вся инфоpмация в файле зааpхивиpована. Для диpектоpии это означает, что сжатие подpазумевается по умолчанию для создаваемых вновь файлов и поддиpектоpий.
- FILE_ATTRIBUTE_NORMAL У файла нет дpугих аттpибутов. Этот аттpибут действителен, только если исопльзуется один.
- FILE_ATTRIBUTE_HIDDEN Файл спpятан. Он не включается в обычные листинги диpектоpий.
- FILE_ATTRIBUTE_READONLY Файл только для чтения. Пpиложения могут читать из файла, но не могут писать в него или удалить его.
- FILE_ATTRIBUTE_SYSTEM Файл - часть опеpационной системы или используется только ей.
Когда файл откpыт, мы pезеpвиpует блок память для использования функциями ReadFile и WriteFile. Мы указываем флаг GMEM_MOVEABLE, чтобы позволить Windows пеpемещать блок памяти, чтобы уплотнять последнюю.
Когда GlobalAlloc возвpащает положительный pезультат, eax содеpжит хэндл заpезеpвиpованного блока памяти. Мы пеpедаем этот хэндл функции GlobalLock, котоpый возвpащает указатель на блок памяти.
В этой месте у нас нет необходимости деpжать файл откpытым, так как нашей целью является запись модифициpованных данных из edit control'а в дpугой файл, а не в оpигинальный. Поэтому мы закpываем файл функцией CloseHandle, пеpедав ей в качестве паpаметpа хэндл файла. Затем мы откpываем блок памяти и освобождаем его. В действительности, вам не нужно освобождать ее сейча, вы можете использовать этот же блок во вpемя опеpации сохpанения. Hо в демонстpационных целях я освобождаю ее сейчас.
Когда на экpане отобpажается окно откpытия файла, фокус ввода сдвигается на него. Поэтому, когда это окно закpывается, мы должны пеpедвинуть фокус ввода обpатно на edit control.
Это заканчивает опеpацию чтения из файла. В этом месте пользователь должен отpедактиpовать содеpжимое edit control'а. И когда он хочет сохpанить данные в дpугой файла, он должен выбpать File/Save, после чего отобpазиться диалоговое окно. Создание окна сохpанения файла не слишком отличается от создание окна откpытия файла. Фактически, они отличаются только именем функций. Вы можете снова использовать большинство из паpаметpов стpуктуpы ofn, кpоме паpаметpа Flags.
В нашем случае, мы хотим создать новый файл, так чтобы OFN_FILEMUSTEXIST и OFN_PATHMUSTEXIST должны быть убpаны, иначе диалоговое окно не позволит нам создать файл, котоpый уже не существует.
Паpаметp dwCreationDistribution функции CreateFile должен быть установлен в CREATE_NEW, так как мы хотим создать новый файл.
Оставшийся код пpактически одинаков с тем, что используется пpи создании окна откpытия файла, за исключением следующего:Для управления памятью, прикладным программам предоставляются различные интерфейсы: (первые 3 применимы в наст.время):
· VirtualMemoryAPI – набор ф-ий, позволяющих приложению работать с вирт. адресным пространством: назначать физические страницы блоку адресов и освобождать их, устанавливать атрибуты защиты.
· MemoryMappedFileAPI – наборф-ий, позволяющих работать с файлами, отображаемыми в память; новый механизм, предоставляемый Win32API для работы с файлами и взаимодействия процессов;
· HeapMemoryAPI – набор ф-ий, позволяющих работать с динамически распределяемыми областями памяти (кучами).
· Local, GlobalMemoryAPI – набор ф-ий для работы с памятью, совместимых с х16 Windows (уже не используются).
· CRTMemoryAPI – ф-ии стандартной библиотеки языка С периода исполнения (runtime).
Интерфейс Virtual Memory.
VirtualMemoryAPI – набор ф-ий, позволяющих приложению работать с вирт. адресным пространством: назначать физические страницы блоку адресов и освобождать их, устанавливать атрибуты защиты.
Блок адресов адресного пространства процесса может нах-ся в одном из состояний:
-выделен (commited) – блоку адресов назначена физическая память, либо часть файла подкачки
-зарезервирован (reserved) – блок адресов помечен как занятый, но физическая память не распределена
-свободен (free) – блок адресов не выделен и не зарезервирован
При выделении память обнуляется.
Память сначала резервируется, потом выделяется.
VirtualAlloc () – выделяет память. Его параметры определяют: размер выделяемой памяти (не более 1 Гб), где в адресном пр-ве расположить выделенный фрагмент, надо ли закреплять физическую память, вид устанавливаемой защиты. Резервирует память фрагментами 64 кб, а закрепляет ее фрагментами объемом 1 страницу (4 кб).
VirtualProtect() –позволяет изменять атрибуты защиты в адресном пространстве текущего процесса.
VirtualProtectEx() –позволяет изменять атрибуты защиты в адресном пространстве произвольного процесса.
VirualQuery() – заполняет поля структуры информацией о заданном блоке памяти.
GlobalMemoryStatus() – определяет размер и свободный объем физической памяти, страничного файла и текущего адресного пространства.
GetSystemInfo() – возвращает размер системной физической страницы.
По завершении процесса ОС отменяет блокировку, освобождает использованную им память.
VirtualFree() – отменяет закрепление набора страниц, оставляя их адреса зарезервированными или освобождает память занимаемую этими страницами(даже заблокированные страницы).
Интерфейс Memory mapped file.
MemoryMappedFileAPI – набор ф-ий позволяющих работать с файлами, отображаемыми в память; новый механизм, предоставляемый Win32APIдля работы с файлами и взаимодействия процессов.
1. Исп-ся для запуска .exeи .dll.
-создания адресного простр-ва (размером 4 Гб)
-из ехефайластраницызагружаются в регион
-отображение в регион необходимыхdll.
2. Для работы с файлами.
-создается объект ядра «файл». CreateFile()
-создается объект ядра «проецируемый файл» CreateFileMapping(). Возвращает Handle.
-проецирование файла в вирт.память MapViewOfFile().
-убрать проецирование в память: UnmapViewFile().
Уничтожение объектов «файл», «проецируемый файл» - CloseHandle().
3. Для одновременного использования одной области данных несколькими процессами.
2 процесса могут использовать совместно, объект «проецируемый файл». При помощи MapViewOfFile() каждый процесс проецирует этот объект на свое адресное пространство и использует эту часть адресного пространства как разделяемую область данных.
Интерфейс Heap Memory.
HeapMemoryAPI – набор ф-ий, позволяющих работать с динамически распределяемыми областями памяти (кучами).
Куча – блок памяти, из которого прога при необходимости выделяет себе более мелкие фрагменты.
Причины группировки выделенных блоков:
-позволяет отделить и защитить группу связанных блоков.
-если все узлы связного списка находятся в одной куче, а узлы двоичного дерева – в другой, то ошибка одного алгоритма в меньшей степени скажется на работе другого алгоритма.
-объекты памяти, работающие совместно могут быть сгруппированы => подкачка страниц сводится к минимуму.
GetProcessHeap() – получить дескриптор стандартной кучи (по умолчанию) памяти.
HeapCreate() – создает кучу. В параметрах указывается начальный размер кучи и максимальный размер кучи (если он =0, то размер кучи ограничивается объемом доступной памяти).
HeapAlloc() – выделение блоков памяти из кучи.
HeapReAlloc() – повторное выделение…(изменение размера блока, после его выделения).
HeapFree() – освобождение блоков памяти.
HeapSize() –узнать точный размер любого блока.
HeapDestroy() – уничтожение «кучи».
Опора деревянной одностоечной и способы укрепление угловых опор: Опоры ВЛ - конструкции, предназначенные для поддерживания проводов на необходимой высоте над землей, водой.
Общие условия выбора системы дренажа: Система дренажа выбирается в зависимости от характера защищаемого.
Поперечные профили набережных и береговой полосы: На городских территориях берегоукрепление проектируют с учетом технических и экономических требований, но особое значение придают эстетическим.
© cyberpedia.su 2017-2020 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!Функции анклава
Функция Описание CreateEnclave Создает новый неинициализированный анклав. Анклав — это изолированная область кода и данных в адресном пространстве приложения. Только код, который выполняется в анклавах, может получить доступ к данным в одном анклавах. InitializeEnclave Инициализирует анклав, созданный и загруженный с данными. IsEnclaveTypeSupported Возвращает значение, указывающего, поддерживается ли указанный тип анклава. LoadEnclaveData Загружает данные в неинициализированный анклав, созданный путем вызова CreateEnclave. AWE functions
Function Description AllocateUserPhysicalPages Allocates physical memory pages to be mapped and unmapped within any AWE region of the process. AllocateUserPhysicalPagesNuma Allocates physical memory pages to be mapped and unmapped within any AWE region of the process, and specifies the NUMA node for the physical memory. FreeUserPhysicalPages Frees physical memory pages previously allocated with AllocateUserPhysicalPages. MapUserPhysicalPages Maps previously allocated physical memory pages at the specified address within an AWE region. MapUserPhysicalPagesScatter Maps previously allocated physical memory pages at the specified address within an AWE region. Virtual memory functions
Function Description DiscardVirtualMemory Discards the memory contents of a range of memory pages, without decommitting the memory. The contents of discarded memory is undefined and must be rewritten by the application. OfferVirtualMemory Indicates that the data contained in a range of memory pages is no longer needed by the application and can be discarded by the system if necessary. PrefetchVirtualMemory Prefetches virtual address ranges into physical memory. QueryVirtualMemoryInformation Returns information about a page or a set of pages within the virtual address space of the specified process. ReclaimVirtualMemory Reclaims a range of memory pages that were offered to the system with OfferVirtualMemory. SetProcessValidCallTargets Provides CFG with a list of valid indirect call targets and specifies whether they should be marked valid or not. VirtualAlloc Reserves or commits a region of pages in the virtual address space of the calling process. VirtualAlloc2 Reserves, commits, or changes the state of a region of memory within the virtual address space of a specified process. The function initializes the memory it allocates to zero. VirtualAlloc2FromApp Reserves, commits, or changes the state of a region of pages in the virtual address space of the calling process. Memory allocated by this function is automatically initialized to zero. VirtualAllocEx Reserves or commits a region of pages in the virtual address space of the specified process. VirtualAllocExNuma Reserves or commits a region of memory within the virtual address space of the specified process, and specifies the NUMA node for the physical memory. VirtualAllocFromApp Reserves, commits, or changes the state of a region of pages in the virtual address space of the calling process. Memory allocated by this function is automatically initialized to zero. VirtualFree Releases or decommits a region of pages within the virtual address space of the calling process. VirtualFreeEx Releases or decommits a region of memory within the virtual address space of a specified process. VirtualLock Locks the specified region of the process's virtual address space into physical memory. VirtualProtect Changes the access protection on a region of committed pages in the virtual address space of the calling process. VirtualProtectEx Changes the access protection on a region of committed pages in the virtual address space of the calling process. VirtualProtectFromApp Changes the protection on a region of committed pages in the virtual address space of the calling process. VirtualQuery Provides information about a range of pages in the virtual address space of the calling process. VirtualQueryEx Provides information about a range of pages in the virtual address space of the calling process. VirtualUnlock Unlocks a specified range of pages in the virtual address space of a process. Функции кучи
Функция Описание GetProcessHeap Получает дескриптор кучи вызывающего процесса. GetProcessHeaps Получает дескрипторы для всех кучи, допустимых для вызывающего процесса. HeapAlloc Выделяет блок памяти из кучи. HeapCompact Объединяет смежные свободные блоки памяти в куче. HeapCreate Создает объект кучи. ХеапДеху Уничтожает указанный объект кучи. HeapFree Освобождает блок памяти, выделенный из кучи. HeapLock Пытается получить блокировку, связанную с указанной кучей. HeapQueryInformation Извлекает сведения об указанной куче. HeapReAlloc Перераспределяет блок памяти из кучи. HeapSetInformation Задает сведения о куче для указанной кучи. Куча Извлекает размер блока памяти, выделенного из кучи. HeapUnlock Освобождает владение блокировкой, связанной с указанной кучей. HeapValidate Пытается проверить указанную кучу. HeapWalk Перечисляет блоки памяти в указанной куче. Функции виртуальной памяти
Функция Описание DiscardVirtualMemory Удаляет содержимое памяти диапазона страниц памяти без списания памяти. Содержимое отброшенной памяти не определено и должно быть перезаписано приложением. OfferVirtualMemory Указывает, что данные, содержащиеся в диапазоне страниц памяти, больше не нужны приложению и могут быть удалены системой при необходимости. PrefetchVirtualMemory Предварительно извлекает диапазоны виртуальных адресов в физическую память. QueryVirtualMemoryInformation Возвращает сведения о странице или наборе страниц в виртуальном адресном пространстве указанного процесса. ReclaimVirtualMemory Освобождает диапазон страниц памяти, предлагаемых системе с помощью OfferVirtualMemory. SetProcessValidCallTargets Предоставляет CFG со списком допустимых целевых объектов косвенных вызовов и указывает, должны ли они быть помечены как допустимые. VirtualAlloc Резервирует или фиксирует область страниц в виртуальном адресном пространстве вызывающего процесса. VirtualAlloc2 Резервирует, фиксирует или изменяет состояние области памяти в виртуальном адресном пространстве указанного процесса. Функция инициализирует память, выделенную нулю. VirtualAlloc2FromApp Резервирует, фиксирует или изменяет состояние области страниц в виртуальном адресном пространстве вызывающего процесса. Память, выделенная этой функцией, автоматически инициализируется до нуля. VirtualAllocEx Резервирует или фиксирует область страниц в виртуальном адресном пространстве указанного процесса. VirtualAllocExNuma Резервирует или фиксирует область памяти в виртуальном адресном пространстве указанного процесса и задает узел NUMA для физической памяти. VirtualAllocFromApp Резервирует, фиксирует или изменяет состояние области страниц в виртуальном адресном пространстве вызывающего процесса. Память, выделенная этой функцией, автоматически инициализируется до нуля. VirtualFree Освобождает или удаляет регион страниц в виртуальном адресном пространстве вызывающего процесса. VirtualFreeEx Освобождает или освобождает область памяти в виртуальном адресном пространстве указанного процесса. VirtualLock Блокирует указанный регион виртуального адресного пространства процесса в физической памяти. VirtualProtect Изменяет защиту доступа в регионе зафиксированных страниц в виртуальном адресном пространстве вызывающего процесса. VirtualProtectEx Изменяет защиту доступа в регионе зафиксированных страниц в виртуальном адресном пространстве вызывающего процесса. VirtualProtectFromApp Изменяет защиту в области зафиксированных страниц в виртуальном адресном пространстве вызывающего процесса. VirtualQuery Предоставляет сведения о диапазоне страниц в виртуальном адресном пространстве вызывающего процесса. VirtualQueryEx Предоставляет сведения о диапазоне страниц в виртуальном адресном пространстве вызывающего процесса. VirtualUnlock Разблокирует указанный диапазон страниц в виртуальном адресном пространстве процесса. Global and local functions
Also see global and local functions. These functions are provided for compatibility with 16-bit Windows and are used with Dynamic Data Exchange (DDE), the clipboard functions, and OLE data objects. Unless documentation specifically states that a global or local function should be used, new applications should use the corresponding heap function with the handle returned by GetProcessHeap. For equivalent functionality to the global or local function, set the heap function's dwFlags parameter to 0.
Function Description Corresponding heap function GlobalAlloc, LocalAlloc Allocates the specified number of bytes from the heap. HeapAlloc GlobalDiscard, LocalDiscard Discards the specified global memory block. Not applicable. GlobalFlags, LocalFlags Returns information about the specified global memory object. Not applicable. Use HeapValidate to validate the heap. GlobalFree, LocalFree Frees the specified global memory object. HeapFree GlobalHandle, LocalHandle Retrieves the handle associated with the specified pointer to a global memory block. This function should be used only with OLE and clipboard functions that require it. Not applicable. GlobalLock, LocalLock Locks a global memory object and returns a pointer to the first byte of the object's memory block. Not applicable. GlobalReAlloc, LocalReAlloc Changes the size or attributes of a specified global memory object. HeapReAlloc GlobalSize, LocalSize Retrieves the current size of the specified global memory object. HeapSize GlobalUnlock, LocalUnlock Decrements the lock count associated with a memory object. This function should be used only with OLE and clipboard functions that require it. Not applicable. Плохие функции памяти
Heap functions
Function Description GetProcessHeap Obtains a handle to the heap of the calling process. GetProcessHeaps Obtains handles to all of the heaps that are valid for the calling process. HeapAlloc Allocates a block of memory from a heap. HeapCompact Coalesces adjacent free blocks of memory on a heap. HeapCreate Creates a heap object. HeapDestroy Destroys the specified heap object. HeapFree Frees a memory block allocated from a heap. HeapLock Attempts to acquire the lock associated with a specified heap. HeapQueryInformation Retrieves information about the specified heap. HeapReAlloc Reallocates a block of memory from a heap. HeapSetInformation Sets heap information for the specified heap. HeapSize Retrieves the size of a memory block allocated from a heap. HeapUnlock Releases ownership of the lock associated with a specified heap. HeapValidate Attempts to validate a specified heap. HeapWalk Enumerates the memory blocks in a specified heap. Enclave functions
Function Description CreateEnclave Creates a new uninitialized enclave. An enclave is an isolated region of code and data within the address space for an application. Only code that runs within the enclave can access data within the same enclave. InitializeEnclave Initializes an enclave that you created and loaded with data. IsEnclaveTypeSupported Retrieves whether the specified type of enclave is supported. LoadEnclaveData Loads data into an uninitialized enclave that you created by calling CreateEnclave. Читайте также: