2009-07-10 25 views
5

例如,我们有一个DWORD = $ 12345678是'绝对'比Move()更快?

哪个指令会更快 - 绝对或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; 

具体来说,我问究竟“绝对”不会,因为如果不使用额外的内存来写的ByteArray那我也没有理由使用在这种情况下移动,而不是绝对的它是如何'绝对'的工作?

回答

18

绝对不执行任何操作;它声明一个var的地址与另一个var相同。

Move()执行复制操作,这需要一些时间。

绝对,两个变量存储在同一个地址,你的第二个声明将变量存储在不同的位置。

9

'绝对'指令指向与指定变量相同的内存。没有代码执行,所以是的,它比移动或任何其他代码更快。

6

'Absolute'是类型转换的另一种形式,就像您获得对'A'DWORD的位置引用,并且PByte指针与字节一起使用:PByte(@A)^ [0]:= 3,PByte(@A)^ [1]:= 4等。您正在以另一种方式戳(或读取)DWORD变量。 Pascal是一种强类型语言,但是使用类型转换(或ABSOLUTE),你可以做任何事情。 Bri