Stavo passando alcune delle decisioni prese per rendere Xara Xtreme, un'applicazione grafica SVG open source. La loro decisione sulla gestione della memoria era piuttosto intrigante per me dato che davo ingenuamente per scontato che l'allocazione dinamica su richiesta fosse il modo di scrivere un'applicazione orientata agli oggetti.In quali situazioni l'allocazione statica ha una migliore offerta rispetto all'allocazione dinamica?
La spiegazione della documentazione è
Come sulla terra può statica allocazioni essere efficace?
Se si è abituati a strutture di dati dinamici di grandi dimensioni, questo potrebbe sembrare strano . In primo luogo, tutti gli oggetti (e le dimensioni di allocazione ) sono molto più piccoli (in media) di ciascuna allocazione di area dinamica all'interno di un programma come Impression. Ciò significa che sebbene sia probabile che ci siano molti buchi nella memoria, , sono piccoli. Inoltre, abbiamo molto più oggetti allocati nella memoria, e quindi questi buchi si riempiono rapidamente. Inoltre, gestori di memoria virtuale libererà eventuali pagine di memoria che non contengono allocazioni e dare questa memoria indietro al sistema operativo in modo che possa essere riutilizzato (sia da noi o da un'altra attività).
Abbiamo beneficiare notevolmente il fatto che ogni volta che allocare memoria in questo modo, non abbiamo spostare qualsiasi memoria circa. Questo ha dimostrato un collo di bottiglia in ArtWorks che anche aveva molte allocazioni piccole che venivano usate contemporaneamente . more
In sintesi, la presenza di molti piccoli oggetti e la necessità di evitare memoria mossa sono le ragioni per la scelta allocazione statica. Non ho una chiara comprensione delle ragioni menzionate.
Anche se questo parla di allocazione statica, quello che vedo dall'aspetto superficiale del codice è che un blocco di memoria viene assegnato dinamicamente all'avvio dell'applicazione e mantenuto attivo fino alla fine dell'applicazione, simulando approssimativamente l'allocazione statica.
Puoi spiegare in quali situazioni le tariffe di allocazione statica sono migliori rispetto all'allocazione dinamica su richiesta per considerarla come la principale modalità di allocazione in applicazioni gravi?
Grazie. Ora vedo che il pattern del pool di oggetti è la tecnica utilizzata in Xara Xtreme. http://en.wikipedia.org/wiki/Object_pool_pattern – rpattabi