Einige Leute sagten: "Jede Operation, die durch Arrays Subskribierung erreicht werden kann, kann auch mit Zeigern erfolgen. Die Zeigerversion wird im Allgemeinen schneller sein".Effizienz zwischen Zeiger und Array (weniger Montageanweisungen dauert nicht weniger Zeit)
Ich bezweifle, über das Ergebnis der oben genannten, so dass ich den folgenden Test:
Im folgenden Artikel, Wir kümmern uns nicht Compiler-Optimierung. Über Compiler-Optimierung, wie die Effizienz zwischen Zeiger und Array beeinflussen, bitte beachten Sie: Efficiency: arrays vs pointers
(Visual Studio 2010, Debug-Modus, keine Optimierungen)
#include <windows.h>
#include <stdio.h>
int main()
{
int a[] = {10,20,30};
int* ap = a;
long counter;
int start_time, end_time;
int index;
start_time = GetTickCount();
for (counter = 1000000000L; counter>0; counter--)
{
*(ap+1) = 100;
}
end_time = GetTickCount();
printf("10 billion times of *ap = %d\n", end_time-start_time);
start_time = GetTickCount();
for (counter = 1000000000L; counter>0; counter--)
{
a[1] = 101;
}
end_time = GetTickCount();
printf("10 billion times of a[0] = %d\n", end_time-start_time);
return 0;
}
das Ergebnis:
10 billion times of *ap = 3276
10 billion times of a[0] = 3541
Der Zeiger scheint ein wenig schnell zu sein. Aber nachdem ich die verglichenen dis zusammenbauen, ich in eine tiefere Verwirrung fiel.
(Visual Studio 2010, Debug-Modus, keine Optimierungen)
; 17 : *(ap+1) = 100;
mov eax, DWORD PTR _ap$[ebp]
mov DWORD PTR [eax+4], 100 ; 00000064H
; 25 : a[1] = 101;
mov DWORD PTR _a$[ebp+4], 101 ; 00000065H
Vom Ausgang montieren, Speicherzugriff über einen Zeiger nimmt 2 Anweisungen und Array benötigt nur 1 Befehl.
Warum Array weniger Anweisungen ausführen, aber es dauert nicht weniger Zeit als Zeiger?
Ist es mit dem CPU-Cache verbunden? Wie kann ich meinen Testcode ändern, um dies zu beweisen?
nie im Debug-Modus optimieren ... – TemplateRex
Vor vielen Jahren habe ich genau das getestet. Die Array-Indizierung war schneller. Die Aussage ist Quatsch, entweder könnte es schneller sein, es kommt nur darauf an. – john
Es hängt nur ... auf Hardware? – Philip