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 contoh variabel global dan statis DLL sendiri secara default.

Catatan

Alat pengembangan Anda dapat 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 fungsi DllMain untuk menyiapkan memori bersama menggunakan pemetaan file, lihat Menggunakan Memori Bersama di Pustaka Dynamic-Link.

Storage Lokal Utas

Fungsi penyimpanan lokal utas (TLS) memungkinkan DLL mengalokasikan indeks untuk menyimpan dan mengambil nilai yang berbeda untuk setiap utas dari proses multithread. 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 setiap spreadsheet saat ini (baris, kolom, dan sebagainya). Untuk diskusi umum tentang penyimpanan lokal utas, lihat Storage Lokal Utas. Untuk contoh yang menggunakan fungsi DllMain untuk menyiapkan penyimpanan lokal utas, lihat Menggunakan Storage Lokal Utas di Pustaka Dynamic-Link.

Windows Server 2003 dan Windows XP: Kompilator Visual C++ mendukung sintaks yang memungkinkan Anda mendeklarasikan variabel thread-local: _declspec(thread). 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).