17. maj 2006 - 23:57Der er
8 kommentarer og 1 løsning
performance af to dimensionelt array vs liniært array
Jeg tænkte over hvad grunden til at multi dimensionelle arrays i java er implementeret som arrays af referencer til arrays når man kan fake multidimensionelle arrays med et en-dimensionelt array som eksempelvis med oneArray[i*n+j] som er ækvivalent med twoArray[i][j]. Er der nogle fordele mht cache når man har med mange små arrays at gøre frem for et stort.
begrundelsen er vel at man i praksis (bortset fra numeriske kalkulationer) oftest har brug for dobbelt dynamikken: først allokerer man referencer til et antal arrays og så allokerer man de enkelte arrays
ja rigtige 2D arrays er kontinuerligt memory hvor compileren omregner fra 2 index til et offset (som er det tilsvarende 1D index evt. ganget med størrelsen af typen)
Ok. Jeg har testet lidt i java og det ser ud til at arrays af arrays er ca 10% hurtigere end et kontinuerligt array hvor man omregner index.
Jeg forstår ikke helt det dynamiske argument. Bliver man ikke altid nødt til at allokere som new int[n][m]. Dvs allokere m+1 arrays på en gang. Er det muligt først at allokere et array og derefter fylde det array op med arrays som der er behov for det?
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.