Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Tempo von Arrayzugriffen

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
02.09.2006, 17:00 Uhr
~GastZulu
Gast


Hi Leute !


C++:
int xyz[3];



Wenn ich jetzt wie folgt zugreife...

C++:
[...]
int t= xyz[0] + xyz[2] + [...hier ganz viele weitere Arrayzugriffe auf xyz...]
[...]

...und das ganze wiederum auf extrem oft, wäre es dann schneller wenn
ich ohne Array arbeiten würde ?

C++:
int x;
int y;
int z;





C++:
[...]
int t= x + z + [...hier ganz viele weitere Zugriffe auf x, y oder z...]
[...]



Meine Frage ist also ob der Arrayzugriff langsamer ist
als der direkte Zugriff auf eine Variable ? Also ich
kann mir gut vorstellen das er langsamer ist wenn ich
als Arrayindex eine Variable benutzen würde, aber wie
ist das wenn ich eine Konstante (hier 1...2) verwende ?
Ersetzt das irgendwie der Compiler beim Bauen schon
durch einen Direktzugriff der genauso schnell ist wie
ein Variablenzugriff ? :confused:

Ok ich hoffe jemand kann mir da weiterhelfen, danke !
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
02.09.2006, 17:57 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


Hi, schau dir doch mal den Assembler-output deines Programms an, einmal mit array und einmal mit 3 einzelnen variablen.


C++:
...

.globl a
        .type   a, @function
a:
        pushl   %ebp
        movl    %esp, %ebp
        subl    $24, %esp
        movl    $5, -24(%ebp)  // x[0] = 5
        movl    $10, -20(%ebp) // x[1] = 10
        movl    $15, -16(%ebp) // x[2] = 15
        movl    -20(%ebp), %eax // zugriff "x[0]"
        addl    -24(%ebp), %eax // zugriff "x[1]"
        addl    -16(%ebp), %eax // zugriff "x[2]"
        leave
        ret
        .size   a, .-a
.globl b
        .type   b, @function
b:
        pushl   %ebp
        movl    %esp, %ebp
        subl    $12, %esp
        movl    $5, -4(%ebp)   // x = 5
        movl    $10, -8(%ebp)  // y = 10
        movl    $15, -12(%ebp) // z ) 15
        movl    -8(%ebp), %eax  // zugriff "x"
        addl    -4(%ebp), %eax  // zugriff "y"
        addl    -12(%ebp), %eax // zugriff "z"
        leave
        ret
        .size   b, .-b

...



für


C++:
int a(void)
{
  int x[3] = {5, 10, 15};
  return x[0] + x[1] + x[2];
}

int b(void)
{
  int x = 5, y = 10, z = 15;
  return x + y + z;
}
// ...



außer die Stackadressen ist in dem Fall der zugriff identisch

In deinem Beispiel sollte es keine Auswirkungen haben, bei diversen anderen gibt es natürlich kleine Tricks um den zugriff etwas zu beschleunigen.
--
class God : public ChuckNorris { };

Dieser Post wurde am 02.09.2006 um 18:03 Uhr von FloSoft editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
03.09.2006, 21:31 Uhr
~GastZulu
Gast


cool danke

Wie kann ich mir denn in devstudio auf die schnell mal
den generierten assembler code für funktionen zb ansehen ?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
03.09.2006, 21:58 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


da musst du in den Projektoptionen irgendwo "Assembly-Ausgabe" aktivieren, schau ins Handbuch. mit gcc ist es der Befehl -S
--
class God : public ChuckNorris { };
 
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: