Dynamic-Link 連結庫數據
Dynamic-Link 連結庫 (DLL) 可以包含全域數據或本機數據。
變數範圍
在 DLL 原始碼檔案中宣告為全域的變數會由編譯程式和連結器視為全域變數,但載入指定 DLL 的每個進程都會取得該 DLL 全域變數的專屬複本。 靜態變數的範圍僅限於宣告靜態變數的區塊。 因此,每個進程預設都有自己的 DLL 全域和靜態變數實例。
注意
您的開發工具可讓您覆寫預設行為。 例如,Visual C++ 編譯程式支援 #pragma 區段,而且連結器支援 /SECTION 選項。 如需詳細資訊,請參閱開發工具隨附的檔。
易失記憶體配置
當 DLL 使用任何記憶體配置函式來配置記憶體時(GlobalAlloc、LocalAlloc、HeapAlloc和 VirtualAlloc),記憶體會配置在呼叫進程的虛擬位址空間中,而且只能存取該程式的線程。
DLL 可以使用檔案對應來配置可在進程之間共用的記憶體。 如需如何使用檔案對應來建立具名共用記憶體的一般討論,請參閱 檔案對應。 如需使用 DllMain 函式使用檔案對應設定共用記憶體的範例,請參閱在 Dynamic-Link Library 中使用共用記憶體。
線程本機記憶體
線程本機記憶體 (TLS) 函式可讓 DLL 配置索引,以便儲存和擷取多線程進程每個線程的不同值。 例如,每次用戶開啟新的電子錶格時,電子錶格應用程式都可以建立相同線程的新實例。 為各種電子錶格作業提供函式的 DLL 可以使用 TLS 來儲存每個電子錶格目前狀態的相關信息(數據列、數據行等等)。 如需線程本機記憶體的一般討論,請參閱 線程本機記憶體。 如需使用 DllMain 函式來設定線程本機記憶體的範例,請參閱 在 Dynamic-Link Library中使用線程本機記憶體。
Windows Server 2003 和 Windows XP: Visual C++ 編譯程式支援一種語法,可讓您宣告線程局部變數:_declspec(thread)。 如果您在 DLL 中使用此語法,您將無法在 Windows Vista 之前的 Windows 版本上明確使用 LoadLibrary 或 LoadLibraryEx 載入 DLL。 如果明確載入 DLL,您必須使用線程本機記憶體函式,而不是 _declspec(thread)。