2009-07-10 17 views
5

Por ejemplo, tenemos un DWORD = $ 12345678es 'absoluto' más rápido que Move()?

¿Cuál de las instrucciones sería más rápida: absoluta o Move()?

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; 

Específicamente, estoy pidiendo lo que hace exactamente 'absoluto', porque si no utiliza memoria adicional para escribir que bytearray entonces no tengo ninguna razón para utilizar en lugar de mover absoluta en ese caso Entonces, ¿cómo trabajo 'absoluto'?

Respuesta

18

absolute no realiza ninguna operación; declara que la dirección de una var es la misma que otra var.

Move() realiza una operación de copia, lo que lleva algún tiempo.

Con absoluto, ambos valores se almacenan en la misma dirección, su segunda declaración almacena los valores en diferentes ubicaciones.

9

La directiva 'absoluta' apunta a la misma memoria que la variable especificada. No se ejecuta código, así que sí es más rápido que Move o cualquier otro código.

6

'Absolute' es solo otra forma de conversión de tipo como si tuviera una referencia de ubicación a su 'DWORD' con un puntero PByte para trabajar con los bytes como: PByte (@A)^[0]: = 3, PByte (@A)^[1]: = 4, etc. Está pinchando (o leyendo) la variable DWORD de otra manera. Pascal es un lenguaje fuertemente tipado, pero con el tipo de molde (o ABSOLUTO) puede hacer casi cualquier cosa. Bri

Cuestiones relacionadas