Condividi tramite


Dati della libreria Dynamic-Link

Una libreria Dynamic-Link (DLL) può contenere dati globali o dati locali.

Ambito della variabile

Le variabili dichiarate come globali in un file di codice sorgente DLL vengono considerate variabili globali dal compilatore e dal linker, ma ogni processo che carica una determinata DLL ottiene la propria copia delle variabili globali della DLL. L'ambito delle variabili statiche è limitato al blocco in cui vengono dichiarate le variabili statiche. Di conseguenza, ogni processo ha una propria istanza delle variabili globali e statiche della DLL per impostazione predefinita.

Nota

Gli strumenti di sviluppo possono consentire di eseguire l'override del comportamento predefinito. Ad esempio, il compilatore Visual C++ supporta #pragma sezione e il linker supporta l'opzione /SECTION. Per altre informazioni, vedere la documentazione inclusa negli strumenti di sviluppo.

 

Allocazione dinamica della memoria

Quando una DLL alloca memoria usando una qualsiasi delle funzioni di allocazione di memoria (GlobalAlloc, LocalAlloc, HeapAlloc e VirtualAlloc), la memoria viene allocata nello spazio indirizzi virtuale del processo chiamante ed è accessibile solo ai thread di tale processo.

Una DLL può usare il mapping di file per allocare memoria che può essere condivisa tra i processi. Per informazioni generali su come usare il mapping dei file per creare una memoria condivisa denominata, vedere Mapping dei file. Per un esempio che usa la funzione DllMain per configurare la memoria condivisa usando il mapping dei file, vedere Uso della memoria condivisa in una libreria di Dynamic-Link.

archiviazione thread-local

Le funzioni di archiviazione locale del thread consentono a una DLL di allocare un indice per l'archiviazione e il recupero di un valore diverso per ogni thread di un processo multithreading. Ad esempio, un'applicazione foglio di calcolo può creare una nuova istanza dello stesso thread ogni volta che l'utente apre un nuovo foglio di calcolo. Una DLL che fornisce le funzioni per varie operazioni del foglio di calcolo può usare TLS per salvare informazioni sullo stato corrente di ogni foglio di calcolo (riga, colonna e così via). Per una descrizione generale dell'archiviazione locale dei thread, vedere Archiviazione locale dei thread. Per un esempio che usa la funzione DllMain per configurare l'archiviazione locale del thread, vedere Uso dell'archiviazione locale dei thread in una libreria di Dynamic-Link.

Windows Server 2003 e Windows XP: Il compilatore Visual C++ supporta una sintassi che consente di dichiarare le variabili locali del thread: _declspec(thread). Se si usa questa sintassi in una DLL, non sarà possibile caricare la DLL in modo esplicito usando LoadLibrary o LoadLibraryEx nelle versioni di Windows precedenti a Windows Vista. Se la DLL verrà caricata in modo esplicito, è necessario usare le funzioni di archiviazione locale del thread anziché _declspec(thread).If your DLL will loaded explicitly, you must use the thread local storage functions instead of _declspec(thread).