2009-07-10 17 views
5

Ad esempio, abbiamo un DWORD = $ 12345678è "assoluto" più veloce di Move()?

Quale delle istruzioni sarebbe più veloce - assoluta o Sposta()?

var a:DWORD = $12345678; 
    b:Array[0..3] of byte absolute a; 


var a:DWORD = $12345678;b:Array[0..3] of Byte 
begin 
    Move(a,b,4); 
end; 

In particolare, sto chiedendo che cosa fa esattamente 'assoluto', perché se non utilizza la memoria aggiuntiva per scrivere che ByteArray allora non ho alcun motivo per utilizzare Sposta invece di assoluta in questo caso così come fa lavoro "assoluto"?

risposta

18

assoluto non esegue alcuna operazione; dichiara che l'indirizzo di una var è lo stesso di un altro var.

Move() esegue un'operazione di copia, che richiede un po 'di tempo.

In assoluto, entrambi i vars sono memorizzati nello stesso indirizzo, la seconda dichiarazione memorizza i vars in posizioni diverse.

9

La direttiva "absolute" punta alla stessa memoria della variabile specificata. Nessun codice viene eseguito, quindi sì è più veloce di Move o di qualsiasi altro codice.

6

'Absolute' è solo un'altra forma di casting come se si avesse un riferimento di posizione al DWORD 'A' con un puntatore PByte per lavorare con i byte come: PByte (@A)^[0]: = 3, PByte (@A)^[1]: = 4 ecc. Stai giocando (o leggendo) la variabile DWORD solo in un altro modo. Pascal è un linguaggio fortemente tipizzato ma con type-casting (o ABSOLUTE) puoi fare praticamente qualsiasi cosa. Bri