Поделиться через


Данные библиотеки Dynamic-Link

Библиотека Dynamic-Link (DLL) может содержать глобальные или локальные данные.

Область действия переменных

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

Примечание

Средства разработки могут позволить переопределить поведение по умолчанию. Например, компилятор Visual C++ поддерживает #pragma раздел , а компоновщик — параметр /SECTION. Дополнительные сведения см. в документации по средствам разработки.

 

Динамическое выделение памяти

Когда библиотека DLL выделяет память с помощью любой из функций выделения памяти (GlobalAlloc, LocalAlloc, HeapAlloc и VirtualAlloc), память выделяется в виртуальном адресном пространстве вызывающего процесса и доступна только потокам этого процесса.

Библиотека DLL может использовать сопоставление файлов для выделения памяти, которую можно совместно использовать между процессами. Общие сведения об использовании сопоставления файлов для создания именованной общей памяти см. в разделе Сопоставление файлов. Пример использования функции DllMain для настройки общей памяти с помощью сопоставления файлов см. в разделе Использование общей памяти в библиотеке Dynamic-Link.

локальное хранилище потока

Функции локального хранилища потока (TLS) позволяют библиотеке DLL выделять индекс для хранения и извлечения разных значений для каждого потока многопоточного процесса. Например, приложение электронной таблицы может создавать новый экземпляр одного и того же потока каждый раз, когда пользователь открывает новую электронную таблицу. Библиотека DLL, предоставляющая функции для различных операций с электронными таблицами, может использовать ПРОТОКОЛ TLS для сохранения сведений о текущем состоянии каждой электронной таблицы (строки, столбца и т. д.). Общие сведения о локальном хранилище потока см. в разделе Локальное хранилище потоков. Пример использования функции DllMain для настройки локального хранилища потока см. в разделе Использование локального хранилища потока в библиотеке Dynamic-Link.

Windows Server 2003 и Windows XP: Компилятор Visual C++ поддерживает синтаксис, позволяющий объявлять локальные переменные потока: _declspec(thread). Если этот синтаксис используется в библиотеке DLL, вы не сможете явно загрузить библиотеку DLL с помощью LoadLibrary или LoadLibraryEx в версиях Windows, предшествующих Windows Vista. Если библиотека DLL будет загружена явным образом, необходимо использовать функции локального хранилища потока вместо _declspec(thread).