Hallo ich habe mal einwenig recherchiert und bin darauf gestossen, dass es beim kopieren von arrays, sagen wir mal zum bsp von 3d arrays zu erheblichen performance unterschieden kommen kann, je nach dem in welcher reihenfolge man die 3 for-schleifen durchläuft. das fand ich schon beeidruckend. nun stellt sich mir aber die frage, muss man arrays wirklich immer mit diesen for-schleifen durchlaufen? kann man nich irgendwie einfach nen pointer oder so was umlegen? also wenn ich zum beispiel 2 arrays hab:
Code:
double arr1[800][600]; double arr2[800][600];
und will den inhalt von arr1 nach arr2 kopiern. arr1 liegt ja irgendwo am stück im speicher. kann ich da nich direkt über einen speicherzugriff arr1 nach arr2 kopiern? die anfangsadresse bekommt man doch mit &arr1 oder? das müsste doch schneller sein als zwei forschleifen durchzugehen? kann da mal jemand ein fachmännisches kommentar abgeben?
da musst du wahrscheinlich auf ne antwort von virtual fragen was am schnellsten geht. für sowas nehm ich meist immer memcpy, da kannst du dann ganze speicherblöcke kopieren und brauchst nicht ne schleife nehmen.
ach so hätte ich fast vergessen. wenn du die arrays so deklarierst wie oben spielst es keine rolle ob du ein 2d-array draus machst oder nicht, das liegt trotzdem einfach hintereinander im speicher.... -- ...fleißig wie zwei WeißbroteDieser Post wurde am 10.03.2004 um 16:51 Uhr von Windalf editiert.
memcpy ist portabel und schnell. Wenn es allerdings sehr auf die Performance ankommt und du ein x86-System hast, dann kannste die mmx oder xmm-Register (wenn vorhanden) nutzen und damit kopieren, schneller geht es nimmer (prefetchna verwenden).
Fehler, die man durch Fehler korrigiert! Was für eine Ironie! -- A! Elbereth Gilthoniel! silivren penna míriel o menel aglar elenath, Gilthoniel, A! Elbereth!