Claudio Brotto

15 post da leggere

Larry Osterman ha concluso alcuni giorni fa la sua sa serie di post sulla programmazione concorrente.

Una serie davvero molto interessante ed istruttiva: al di là dei suoi "principles of concurrent programming", che vengono riassunti nell'ultimo post, ci sono diversi spunti di riflessione e, almeno per quel che mi riguarda, di studio.

Per esempio mi sono annotato un ripasso del Richter, sezione "Gestione Memoria", capitolo "Heap".

Come illustrato nel post # 11, l'allocazione di memoria da uno heap può essere o meno serializzata, e questo dipende dai flag di creazione dello heap stesso.

A meno di non utilizzare uno heap apposito, questo codice C++:

CSomeClass* pSomeClass = new CSomeClass;

richiede i servizi dello heap primario del processo, che è serializzato. Ogni allocazione (e deallocazione) comporta l'acquisizione e il rilascio di una sezione critica, al fine di garantire la consistenza della struttura dello heap stesso.

Ovviamente se abbiamo la certezza assoluta che un solo thread alla volta possa utilizzare lo heap, nulla ci vieta di crearne uno ad-hoc rinunciando alla funzionalità di serializzazione delle allocazioni, e di sovrascrivere l'operatore new di una classe in modo che gli oggetti relativi non vengano allocati nello heap principale, ma in quello che abbiamo creato allo scopo.

Non c'è dubbio che queste siano ottimizzazioni abbastanza ... spinte, che diventano trascurabili se poi, magari, il nostro software accede al disco in modo pessimizzato.

Ma vale comunque la pena di sapere che cosa succede, non fosse altro per la curiosità di scavare nei meccanismi del sistema.

powered by IMHO 1.2

Posted: mar 16 2005, 03.43 by devlizard
Filed under: