Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ОТВЕТЫ ОС ЭКЗАМЕН.docx.doc
Скачиваний:
2
Добавлен:
16.09.2019
Размер:
185.86 Кб
Скачать

29) Локальная память компьютеров. Функции

В Windows предусмотрен механизм управления данными, локальными для потока (TLS память, Thread Local Storage). Система предоставляет небольшой специальный блок данных, ассоциированный с каждым потоком. В таком блоке возможно в общем случае хранение произвольных данных, однако, так как размеры этого блока крайне малы, то обычно там размещаются указатели на данные большего объема, выделяемые в приложении для каждого потока; в связи с этим ассоциированную с потоком память можно рассматривать как массив двойных слов или массив указателей.

ОС Windows предоставляет четыре функции, необходимые для работы с локальной для потока памятью. Функция DWORD TlsAlloc(void) выделяет в ассоциированной с потоком памяти двойное слово, индекс которого возвращается вызвавшей процедуре. Если ассоциированный массив полностью использован, возвращаемое значение будет равно TLS_OUT_OF_INDEXES, что сообщает об ошибке выделения ячейки. Функция TlsFree освобождает выделенную ячейку.

Если поток выделил некоторую ячейку в ассоциированном массиве, то все потоки данного процесса могут обращаться к ячейке с этим индексом - они получат доступ к ячейкам своих собственных ассоциированных массивов и не смогут узнать или изменить значения, сохраненные в этих ячейках другими потоками. Для доступа к данным зарезервированной ячейки используется функция TlsGetValue, возвращающая значение данной ячейки (в виде указателя, т.к. предполагается, что в ячейках хранятся указатели на некоторые структуры данных) и функция TlsSetValue, изменяющая значение в соответствующей ячейке.

30. Соглашения по вызову, объяснить следующие с, срр, fastcall, stdcall. Дайте рекомендации по использованию соглашения.

1)Возможность использования функции в С и С++ файлах.

2)Возможность использовать переменные списка параметров.

3)Возможность перегрузки функции

Название соглашения

Как задается

Очистка области параметра

Имя функции

Пример

CPP

-

Конец списка, вызов программы <- очищает стэк

зависти от списка параметров

Перегрузка+

Var списка параметров+

C

extern “C”

« »

не зависит от списка параметров

Перегрузка-

Var списка параметров+

fastcall

__fastcall

-

Зависит от передаваемых параметров

Перегрузка+

Var списка параметров-

stdcall

__stdcall

конец списка, чистит функция

имя зависит от списка парметров

Перегрузка+

Var списка параметров-