Data Pustaka Dynamic-Link
Pustaka Dynamic-Link (DLL) dapat berisi data global atau data lokal.
Cakupan Variabel
Variabel yang dinyatakan sebagai global dalam file kode sumber DLL diperlakukan sebagai variabel global oleh pengkompilasi dan linker, tetapi setiap proses yang memuat DLL tertentu mendapatkan salinannya sendiri dari variabel global DLL tersebut. Cakupan variabel statis terbatas pada blok tempat variabel statis dideklarasikan. Akibatnya, setiap proses memiliki instans variabel global dan statis DLL sendiri secara default.
Nota
Alat pengembangan Anda mungkin memungkinkan Anda untuk mengambil alih perilaku default. Misalnya, pengkompilasi Visual C++ mendukung bagian #pragma dan linker mendukung opsi /SECTION. Untuk informasi selengkapnya, lihat dokumentasi yang disertakan dengan alat pengembangan Anda.
Alokasi Memori Dinamis
Ketika DLL mengalokasikan memori menggunakan salah satu fungsi alokasi memori (GlobalAlloc, LocalAlloc, HeapAlloc, dan VirtualAlloc), memori dialokasikan di ruang alamat virtual proses panggilan dan hanya dapat diakses oleh utas proses tersebut.
DLL dapat menggunakan pemetaan file untuk mengalokasikan memori yang dapat dibagikan di antara proses. Untuk diskusi umum tentang cara menggunakan pemetaan file untuk membuat memori bersama bernama, lihat Pemetaan File. Untuk contoh yang menggunakan fungsiDllMain untuk menyiapkan memori bersama menggunakan pemetaan file, lihat Menggunakan Memori Bersama di Pustaka Dynamic-Link.
Penyimpanan Lokal Utas
Fungsi penyimpanan lokal utas (TLS) memungkinkan DLL mengalokasikan indeks untuk menyimpan dan mengambil nilai yang berbeda untuk setiap utas proses multithreaded. Misalnya, aplikasi spreadsheet dapat membuat instans baru dari utas yang sama setiap kali pengguna membuka spreadsheet baru. DLL yang menyediakan fungsi untuk berbagai operasi spreadsheet dapat menggunakan TLS untuk menyimpan informasi tentang status saat ini dari setiap spreadsheet (baris, kolom, dan sebagainya). Untuk diskusi umum tentang penyimpanan lokal utas, lihat Thread Local Storage. Untuk contoh yang menggunakan fungsiDllMain untuk menyiapkan penyimpanan lokal utas, lihat Menggunakan Penyimpanan Lokal Utas di Pustaka Dynamic-Link.
Windows Server 2003 dan Windows XP: Kompilator Visual C++ mendukung sintaksis yang memungkinkan Anda mendeklarasikan variabel thread-local: _declspec(utas). Jika Anda menggunakan sintaks ini dalam DLL, Anda tidak akan dapat memuat DLL secara eksplisit menggunakan LoadLibrary atau LoadLibraryEx pada versi Windows sebelum Windows Vista. Jika DLL Anda akan dimuat secara eksplisit, Anda harus menggunakan fungsi penyimpanan lokal utas alih-alih _declspec(utas).