Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Arrays effizient kopieren

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
10.03.2004, 16:42 Uhr
~mc_horst
Gast


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?

grüße

horst
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
10.03.2004, 16:48 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


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ßbrote

Dieser Post wurde am 10.03.2004 um 16:51 Uhr von Windalf editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
10.03.2004, 16:53 Uhr
Tommix



Hallo,

C++:
memcpy(arr2, arr1, 800*600*sizeof(double));


IMHO problemlos.
Zu Deinen Fragen:
1. Ja, siehe oben.
2. &arr1[0] oder einfach arr1.
3. Vermutlich.
4. K.A.

Gruss, Tommix
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
10.03.2004, 17:38 Uhr
~(un)wissender
Gast


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).
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
10.03.2004, 18:02 Uhr
~(un)wissender
Gast


Da steht, wie es genau geht.
www.joryanick.com/memcpySGI.htm


Bearbeitung von Pablo:

Keine Leerzeichen zwischen URL und [ url ] Tags


Dieser Post wurde am 10.03.2004 um 20:36 Uhr von Pablo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
10.03.2004, 18:42 Uhr
~mc_horst
Gast


jo merci an alle. funzt und is spürbar schneller.
schön


ciaoi

mc_horst
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
10.03.2004, 20:31 Uhr
~(un)wissender
Gast


Danke Pablo, und keine zwei rr hintereinander bei Leerzeichen
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
10.03.2004, 20:37 Uhr
Pablo
Supertux
(Operator)


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!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: