Mein Vorschlag:
Delphi-Quellcode:
procedure SwapString(
var S1, S2:
string);
{$if defined(CPUX86)}
asm
push [edx]
mov ecx, [eax]
mov [edx], ecx
pop ecx
mov [eax], ecx
end;
{$elseif defined(CPUX64)}
asm
push [rdx]
mov r9, [rcx]
mov [edx], r9
pop r9
mov [rcx], r9
end;
{$else}
var
Temp:
string;
begin // ergibt mehr als 200 Assemblerbefehle
Temp := S1;
S1 := S2;
S2 := Temp;
end;
{$endif}
Bei ARM kann ich das jetzt nicht direkt aus dem Hut ziehen, deshalb dafür rein Pascal. Durch die Compiler Magic, die hinter den String Zuweisungen abläuft, ist der Aufwand da aber um ein Vielfaches höher als bei dem reinen Pointertausch.