QNA > Q > Quando Le Funzioni Di Libreria Condivisa Sono Caricate Nell'heap (C, Memoria, Memoria Heap, Sviluppo)?

Quando le funzioni di libreria condivisa sono caricate nell'heap (C, memoria, memoria heap, sviluppo)?

Non sono sicuro che si debba dire che le librerie condivise sono caricate nell'Heap.
Lasciatemi spiegare dal punto di vista di Windows.

In Windows ogni programma ha due tipi di memoria:

  • condivisa - dove vengono caricati EXE e DLL. Condivisa perché queste pagine di memoria sono condivise tra altri processi.
  • Privata - questo è l'heap che è allocato dal programma per i suoi dati privati. Queste pagine di memoria sono visibili solo al processo che le alloca.

Windows EXE supporta due "tipi" di caricamento delle DLL:

  • Implicito - la DLL è elencata nell'header di EXE e viene caricata allo stesso tempo mentre EXE viene caricato
  • Esplicito - le DLL vengono caricate su richiesta dell'utente in fase di esecuzione

Per molto tempo a causa dei virus Windows ha introdotto ASLR (Address Space Layout Randomization) che carica le DLL sempre su indirizzi diversi. La DLL supporta il linking per l'indirizzo assoluto ma questo non è più usato.

In Windows ci sono due tecniche di allocazione della memoria:

  • Memoria Virtuale - allocazione della memoria al livello più basso con tutte le capacità usando le funzioni VirtualAlloc
  • Heap - ogni processo ha uno o più heap creati dalla funzione CreateHeap. Ad esempio il compilatore Microsoft C++ malloc chiama HeapAlloc per allocare la memoria dall'heap predefinito del processo. Naturalmente, internamente CreateHeap usa VirtualAlloc
.

Di Crowe

Posso inviare UNA sola email a tutti i miei contatti in Gmail? :: L'infinito è pari o dispari?
Link utili