2009-07-10 99 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