Если кто может, помогите найти самые производительные параметры для компиляции
- Код: Выделить всё
program lol;
uses Windows;
type
DWORD = Cardinal;
//{$FPUTPYE SSE2}
function Test: DWORD;
var mem: Pointer;
t, i: DWORD;
begin
asm
int3
end;
i := 0;
t := GetTickCount;
while i < (1 shl 20) do
begin
getmem(mem, 1);
freemem(mem, 1);
inc(i);
end;
Test := GetTickCount - t;
end;
function Test2: DWORD;
var
i, t: DWORD;
v: single;
begin
asm
int3
end;
v := 0;
t := GetTickCount;
i := 0;
while i < (1 shl 20) do
begin
v := v * 0.00001;
inc(i);
end;
Test2 := GetTickCount - t;
end;
begin
writeln(test);
readln;
end.
Тест функции "Test"
FPC asm
- Код: Выделить всё
CPU Disasm
Address Hex dump Command Comments
004013F0 55 PUSH EBP
004013F1 89E5 MOV EBP,ESP
004013F3 83EC 10 SUB ESP,10
004013F6 CC INT3
004013F7 C745 F0 0000000 MOV DWORD PTR SS:[EBP-10],0
004013FE E8 4DFCFFFF CALL <JMP.&kernel32.GetTickCount> ; Jump to kernel32.GetTickCount
00401403 8945 F4 MOV DWORD PTR SS:[EBP-0C],EAX
00401406 EB 1D JMP SHORT 00401425
00401408 8D45 F8 LEA EAX,[EBP-8]
0040140B BA 01000000 MOV EDX,1
00401410 E8 FB230000 CALL 00403810
00401415 8B45 F8 MOV EAX,DWORD PTR SS:[EBP-8]
00401418 BA 01000000 MOV EDX,1
0040141D E8 0E240000 CALL 00403830
00401422 FF45 F0 INC DWORD PTR SS:[EBP-10]
00401425 8B45 F0 MOV EAX,DWORD PTR SS:[EBP-10]
00401428 3D 00001000 CMP EAX,100000
0040142D ^ 72 D9 JB SHORT 00401408
0040142F E8 1CFCFFFF CALL <JMP.&kernel32.GetTickCount> ; Jump to kernel32.GetTickCount
00401434 8B55 F4 MOV EDX,DWORD PTR SS:[EBP-0C]
00401437 29D0 SUB EAX,EDX
00401439 8945 FC MOV DWORD PTR SS:[EBP-4],EAX
0040143C 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4]
0040143F C9 LEAVE
00401440 C3 RETN
dcc32 v28 asm
- Код: Выделить всё
CPU Disasm
Address Hex dump Command Comments
00405B14 53 PUSH EBX
00405B15 56 PUSH ESI
00405B16 57 PUSH EDI
00405B17 CC INT3
00405B18 33DB XOR EBX,EBX
00405B1A E8 89FFFFFF CALL <JMP.&kernel32.GetTickCount> ; Jump to kernel32.GetTickCount
00405B1F 8BF8 MOV EDI,EAX
00405B21 B8 01000000 MOV EAX,1
00405B26 E8 11D1FFFF CALL 00402C3C
00405B2B 8BF0 MOV ESI,EAX
00405B2D 8BC6 MOV EAX,ESI
00405B2F E8 24D1FFFF CALL 00402C58
00405B34 43 INC EBX
00405B35 81FB 00001000 CMP EBX,100000
00405B3B ^ 72 E4 JB SHORT 00405B21
00405B3D E8 66FFFFFF CALL <JMP.&kernel32.GetTickCount> ; Jump to kernel32.GetTickCount
00405B42 2BC7 SUB EAX,EDI
00405B44 5F POP EDI
00405B45 5E POP ESI
00405B46 5B POP EBX
00405B47 C3 RETN