Geschwindigkeit Zugriff 2D-Array
-
Hallo,
welche Implementierung eines 2D-Arrays ist schneller im Zugriff? Oder macht das überhautp einen Unterschied?
int** _cells = new int*[ 100 ]; for( unsigned int i = 0; i < 100; ++i ) { _cells[ i ] = new int[ 100 ]; } _cells[ 5 ][ 4 ] = 99;
oder
int* _cells = new int[ 100 * 100 ]; _cells[ 5 * 100 + 4 ] = 99;
Danke. mbu.
-
Öhmm, die zweite initialisierung ist doch garkein 2D ARray odeR ?
int* _cells = new int[ 100 * 100 ]; _cells[ 5 * 100 + 4 ] = 99;
Hier initialisierts du doch einfach ein ARray mit 10000 int Variablen ?! Also is das höchswahrscheinlich auch schneller... Berichtigigt mich falls ich mich irre xD
Außerdem ist ein 1D ARray auch einfacher zu löschen bzw. schneller ...
Gruß Chris
-
Klar, Du hast Recht, das ist kein 2D-Array. Im Grunde genommen will ich damit ein 2D-Array simulieren. Ich bin mir nur nicht sicher, ob der Zugriff über array[] generell schneller ist als über array[][]?
-
hmm also ich würde wetten, dass das heutzutage nicht mehr viel ausmacht... aber ich denke das zweite beispiel ist schneller...
Gruß Chris
-
bei mehrdimensionalen arrays müssen bei zugriff mehr speicheradressen gesammelt und ausgewertet werden. und wenn man "ungeschickt" über so ein array iteriert, kann der compiler nix mehr richten. lässt sich aber meiner meinung nach heutzutage getrost in den bereich der mikrooptimierungen verschieben.
-
Alles klar, danke euch. Das klingt, als könne man der Übersichtlichkeit halber bei der ersten Version bleiben.
-
der übersicht halber bleib ich intern meist bei eindimensionalen arrays *G aber das bin ich
-
Naja stimmt, man kann natürlich auch einfach rausholen was geht
-
Wenn ich ein richtiges 2D Array mache, dann können doch die einzelnen Teile überall im Speicher verteilt liegen, oder? Das ist doch dann langsamer, wegen CPU Cache.
-
das erste ist wegen einer unnoetigen indirektion mehr um einiges langsammer.