Alcune persone hanno detto: "Qualsiasi operazione che può essere ottenuta con l'indice di array può essere eseguita anche con i puntatori.Efficienza tra puntatore e array (meno istruzioni di assemblaggio non richiedono meno tempo)
dubito circa l'esito di quanto sopra, in modo da fare il seguente test:
Nel seguente articolo, noi non interessa ottimizzazione del compilatore. A proposito di ottimizzazione del compilatore come influenzano l'efficienza tra il puntatore e array, si prega di notare: Efficiency: arrays vs pointers
(Visual Studio 2010, la modalità di debug, nessuna ottimizzazione)
#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;
}
il risultato è:
10 billion times of *ap = 3276
10 billion times of a[0] = 3541
Il puntatore sembra essere un po 'veloce. Ma dopo aver confrontato i dis-assemblare, caddi in una confusione profonda.
(Visual Studio 2010, modalità di debug, nessuna ottimizzazione)
; 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
Dall'output assemblare, accesso alla memoria attraverso un puntatore assume 2 istruzioni e array richiede solo 1 istruzione.
Perché la matrice esegue meno istruzioni ma non richiede meno tempo del puntatore?
È associato alla cache della CPU? Come posso modificare il mio codice di prova per dimostrarlo?
mai ottimizzare in modalità di debug ... – TemplateRex
Molti anni fa ho provato esattamente questo. La versione di indicizzazione degli array era più veloce. La dichiarazione è spazzatura, o potrebbe essere più veloce, dipende solo. – john
Dipende solo ... dall'hardware? – Philip