- •1. Библиотеки. Статическая библиотека. Создание.
- •2. Библиотеки. Статическая библиотека. Использование.
- •3. Библиотека. Динамическая библиотека. Создание.
- •4. Библиотека. Динамическая библиотека. Статическая загрузка.
- •5. Библиотека. Динамическая библиотека. Динамическая загрузка.
- •7. Библиотеки. Динамическая библиотека. Сравнение способов загрузки.
- •8.Использование файлов при создании программы.
- •9. Позиционирование при работе с файлами. Функция.
- •10. Отображение файла на памяти. Назвать назначения параметров в функции.
- •11. Управление памятью. Для чего используется.
- •12.Блокирование памяти. В каком случае используется. Функции для блокирования.
- •13.Управление памятью. Для чего используют функции:
- •14. Для чего создаются процессы. Функции.
- •15. Назначение функций:
- •16. Асинхронный ввод/вывод:
- •17. Для чего используются потоки. Функции
- •18. Приоритеты процессов и потоков. Функции:
- •19. Синхронизация потоков. Interlocked функции. Назначение функций:
- •20. Синхронизация потоков. Критические секции. Функции.
- •21. Использование Event для синхронизации. Функции:
- •22. Использование Semaphore для синхронизации. Функции:
- •23. Использование WaitableTimerдля синхронизации. Функции:
- •24) Управление процессом. Планирование и диспетчеризация.
- •25) Использование Mutex для синхронизации. Функции.
- •26) Сравнение сегментной и страничной адресации
- •27) Страничная организация памяти.
- •29) Локальная память компьютеров. Функции
- •30. Соглашения по вызову, объяснить следующие с, срр, fastcall, stdcall. Дайте рекомендации по использованию соглашения.
11. Управление памятью. Для чего используется.
Функция VirtualAlloc позволяет резервировать и/или передавать регион страниц в виртуальном адресном пространстве вызывающего процесса, а также указывать атрибуты защиты страниц при отображении страниц на физическую память региона, иногда этот процесс называют передачей физической памяти.
LPVOID VirtualAlloc(
LPVOID lpAddress, // стартовый адрес в памяти региона (указатель) или NULL.
SIZE_T dwSize, // размер резервируемого региона в байтах. Если в lpAddress передаётся //NULL, то будет зарезервировано количество страниц, необходимое, для размещения //требуемого количества байт от lpAddress до (lpAddress + dwSize).
DWORD flAllocationType, // Этот параметр описывает необходимый тип операции
// MEM_COMMIT, MEM_RESERVE
DWORD flProtect // Этот параметр определяет атрибуты защиты страниц региона и //может принимать следующие значения - P AGE_READONLY, PAGE_READWRITE и //имеют смысл только тогда, когда региону передана физическая память.
);
MEM_COMMIT - Выделяет физическую память или страничный файл на диске. Попытка повторного выделения той же области не приводит к ошибке.
MEM_RESERVE - Резервирует виртуальное адресное пространство заданного размера. Зарезервированный диапазон не может использоваться другими функциями, например LocalAlloc. Выделенный регион может быть связан в дальнейшем с физической памятью.
PAGE_READONLY - Разрешено только чтение.
PAGE_READWRITE - Разрешены чтение и запись данных в регионе страниц.
12.Блокирование памяти. В каком случае используется. Функции для блокирования.
Выделенные страницы можно заблокировать в памяти, т. е. запретить их вытеснение в файл подкачки. Такие страницы остаются в составе рабочего множества процесса до того момента, как будут разблокированы. Для этих целей служит пара функций VirtualLock() и VirtualUnlock(). Процессу не разрешается блокировать более 30 страниц.
Блокирует указанную область указанного виртуального пространства процесса в физической памяти:
BOOL VirtualLock(
LPVOID lpAddress, // Указатель на базовый адрес региона страницы будет заблокирован
DWORD dwSize // размер области будет заблокирован в байтах
); При удачном исходе результат не равен нулю.
Разблокирует область страницы в виртуальном адресном пространстве процесса:
BOOL VirtualUnlock(
LPVOID lpAddress, // начальный адрес
DWORD dwSize // размер
); При удачном исходе результат не равен нулю.
13.Управление памятью. Для чего используют функции:
Смотрим функцию создания кучи.
HANDLE HeapCreate
(
DWORD flOptions, // атрибуты
SIZE_T dwInitialSize, // начальный размер
SIZE_T dwMaximumSize // конечный размер
);
Атрибутов всего два:
HEAP_GENERATE_EXCEPTIONS - Говорит о том, что в случае ошибки нужно генерировать структурную исключительную ситуацию вместо возврата NULL.
HEAP_NO_SERIALIZE - указатель на то, что куча не должна синхронизировать доступ.
При указании максимального размера можно указать 0 что будет говорить о том что максимальный размер будет ограничен только размером виртуальной памяти.
Результат зависит от флага либо исключение, либо NULL.
Создав кучу, есть возможность выделить в ней память.
LPVOID HeapAlloc
(
HANDLE hHeap, // указатель на кучу где можно выделить память
DWORD dwFlags, // флаги
SIZE_T dwBytes // обьем выделяемой памяти
);
Флаги могут быть следующие:
HEAP_GENERATE_ EXCEPTIONS - при ошибке будет исключение вместо NULL
HEAP_NO_SERIALIZE - доступ доложен быть не синхронизированный
HEAP_ZERO_MEMORY - установить содержимое выделяемой памяти в 0
При успешном выполнении возвращается указатель на память, а при ошибке либо NULL, либо исключение.
Для освобождения памяти используется функция HeapFree:
BOOL HeapFree
(
HANDLE hHeap, // указатель на кучу
DWORD dwFlags, // флаги
LPVOID lpMem // указатель на память
);
Флаг может быть HEAP_NO_SERIALIZE что бы отключить механизмы синхронизации. При успешном выполнении возвращаемое значение ненулевое.