Questo dipende un po 'dalla versione di Windows che hai scelto come target, ma basti dire che quando si crea un oggetto GDI come un pennello o un percorso, GDI allocherà della memoria per quell'oggetto nella memoria dell'applicazione o in un memoria di processo del server condiviso (% SYSTEM \ csrss.exe). In alcune versioni di Windows, parte di questa memoria è allocata in modalità Kernel.
Vedi questo vecchio, vecchio, vecchio articolo per quanta memoria e dove
Se non si rilascia l'oggetto, GDI non recupererà la memoria. Basti dire che c'è un limite a quanto è disponibile (non necessariamente proporzionale alla RAM del PC). I limiti effettivi variano, da Windows 95 in poi. Può essere influenzato dal carico generale dell'applicazione (ad esempio, molte app grafiche caricate, alcune delle quali perdenti), problemi con i driver grafici, un numero di utenti concorrenti che competono per la risorsa (ad esempio, Terminal Server).
Se vuoi vederlo esaurito, fai qualcosa di simile a questo:
CBitmap * pbm; while (true) { pbm = CBitmap::CreateBitmap(...); Sleep(0); }
Ulteriori letture:
Perdite di risorse: rilevamento, individuazione e riparazione del codice GDI di perdita
ERRORE: perdita di memoria GDI in IDE di Developer Studio
GDI ha poca memoria - chiudi una o più finestre e prova nuovo
Messaggi di memoria esauriti quando hai un gran numero di programmi in esecuzione