Hmm, seltsam, eigentlich sehe ich keinen Grund, warum er nicht funktionieren sollte. Aber ist ja auch nicht so wichtig... so groß ist der Geschindigkeitsvorteil ja auch nicht – im Zweifelsfalle sollte man da eh die lesbarere und portablere Variante bevorzugen.
Wenn die Länge immer durch 4 teilbar ist, kannst du den Code ja auch noch ein bisschen optimieren, indem du es PByte in PInteger änderst:
Delphi-Quellcode:
procedure XorMemBlock(Source1, Source2, Destination: PInteger; Count: Integer);
begin
while Count > 0
do
begin
Destination^ := Source1^
xor Source2^;
inc(Source1);
inc(Source2);
inc(Destination);
dec(Count);
end;
end;
Wie viel das in der Praxis ausmacht, kann ich nicht sagen, aber theoretisch sollte es schneller sein, weil der Prozessor eh immer 4 Bytes auf einmal lädt und somit weniger oft Daten aus dem
RAM holen muss, wenn man immer in Vierer-Schritten arbeitet, als wenn man sich byteweise durcharbeitet.
Count musst du dann natürlich auch durch den Faktor 4 teilen.