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
Articoli simili
- Quali giochi posso eseguire sul mio portatile i3 con 4GB di RAM e 1,5GB di memoria grafica condivisa?
- Come spostare i file dalla memoria interna a una scheda SD/memoria? Come si fa a spostare le app di LG Stylo 5 dalla memoria esterna alla scheda SD
- Un'app Android acquistata può essere condivisa con un amico attraverso Shareit o un'altra app di terze parti?
- Come scaricare una registrazione zoom condivisa