Сообщение от HolyDel
сравните
Dim a(1000)
For i = 1 To 1000000
a(i Mod 1000) = i/1000
Next
и
int a[1000];
for(int i=0;i<1000000;++i)
a[i%1000] = i/1000;
что будет быстрее, а почему? если компилируется в одинаковый исполняемый код?
со скрип тамшиной я наверное погорячился, но исполняемый код генерируемый блицом несколько медленнее аналогичного кода генерируемого компилятором плюсов.
blitz дает 43 фпс
C++ дает 800 фпс.
|
Компилятор блица не оптимизирующий, отключи оптимизацию у сишного компилятора и получишь практически одинаковый генерируемый код:
Блиц:
;For i = 1 To 1000000
00D9009A: 30304439303039 mov [ebp-04h], 00000001h
00D900A1: 3030443930 jmp 00D900E6h
;x = i / 1000
00D900A6: 303044 mov eax, [ebp-04h]
00D900A9: 3030443930 mov ecx, 000003E8h
00D900AE: 30 cdq
00D900AF: 3030 idiv ecx
;y = i Mod 1000
00D900B1: 303044 mov [ebp-08h], eax
00D900B4: 303044393030 sub esp, 00000008h
00D900BA: 303044 mov ebx, [ebp-04h]
00D900BD: 303044 mov [esp], ebx
00D900C0: 3030443930304330 mov [esp+04h], 000003E8h
00D900C8: 3030 mov eax, ebx
00D900CA: 3030443930 call 00946C20h
;a(y) = x
00D900CF: 3030 mov ebx, eax
00D900D1: 303044 mov eax, [ebp-08h]
00D900D4: 303044 shl ebx, 02h
00D900D7: 303044393030 add ebx, [00D9010Ch]
00D900DD: 3030 mov [ebx], eax
;Next
00D900DF: 30304439303044 add [ebp-04h], 00000001h
00D900E6: 30304439303045 cmp [ebp-04h], 000F4240h
00D900ED: 303044393030 jle 00D900A6h
VS9 без оптимизаций:
;for(int i=0;i<1000000;++i)
00005c745fc00000000 mov DWORD PTR _i$2529[ebp], 0
0000ceb09 jmp SHORT $LN3@main
$LN2@main:
0000e8b45fc mov eax, DWORD PTR _i$2529[ebp]
0001183c001 add eax, 1
000148945fc mov DWORD PTR _i$2529[ebp], eax
$LN3@main:
00017817dfc40420f00 cmp DWORD PTR _i$2529[ebp], 000f4240H
0001e7d21 jge SHORT $LN4@main
;x = i / 1000;
000208b45fc mov eax, DWORD PTR _i$2529[ebp]
0002399 cdq
00024b9e8030000 mov ecx, 000003e8H
00029f7f9 idiv ecx
y = i % 1000
0002b8bc8 mov ecx, eax
0002d8b45fc mov eax, DWORD PTR _i$2529[ebp]
0003099 cdq
00031bee8030000 mov esi, 000003e8H
00036f7fe idiv esi
;a[y] = x
00038890c9500000000 mov DWORD PTR ?a@@3PAHA[edx*4], ecx
;}
0003febcd jmp SHORT $LN2@main
$LN4@main:
ЗЫ
И кстати да, то что в блице нет никакой скрипт-машины еще на старом форуме выяснили.
Ну и еще блиц страдает тем что большинство мат. операций вынесено в функции и их код не инлайнится.