Quando stavo usando il C++ al college, mi è stato detto di usare matrici multidimensionali (con la presente MDA) quando possibile, poiché mostra una migliore localizzazione di memoria dato che è allocata in una grande porzione. Le matrici di array (AoA), d'altra parte, sono allocate in più blocchi più piccoli, eventualmente sparsi ovunque nella memoria fisica in cui vengono trovati i posti vacanti.Confronto delle prestazioni dell'array di array rispetto agli array multidimensionali
Quindi immagino che la prima domanda sia: è un mito, o è un consiglio che vale la pena seguire?
Supponendo che sia il secondo, la prossima domanda sarebbe cosa fare in un linguaggio come Java che non ha un vero MDA. Non è così difficile emulare la MDA con un 1DA, naturalmente. Essenzialmente, ciò che è lo zucchero sintattico per le lingue con MDA può essere implementato come supporto di libreria per le lingue senza MDA.
Vale la pena? Questo è un livello troppo basso di un problema di ottimizzazione per un linguaggio come Java? Dovremmo semplicemente abbandonare gli array e usare List
s anche per i primitivi?
Un'altra domanda: in Java, non allocazione AoA contemporaneamente (new int[M][N]
) eventualmente produrre un'allocazione di memoria diverso che farlo gerarchicamente (new int[M][]; for (... new int[N]
)?
Vedere anche http://stackoverflow.com/questions/2512082/java-multi-dimensional-array-vs-one-dimensional, che contiene i risultati dei benchmark effettivi. – rwong