Показать сообщение отдельно
Старый 06.04.2009, 04:01   #17
Venom2
 
Сообщений: n/a
Ответ: Blitz3d C++ или обычный Basic?

Сообщение от 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:
ЗЫ
И кстати да, то что в блице нет никакой скрипт-машины еще на старом форуме выяснили.

Ну и еще блиц страдает тем что большинство мат. операций вынесено в функции и их код не инлайнится.

Последний раз редактировалось Platon, 06.04.2009 в 04:27.
 
Ответить с цитированием
Эти 3 пользователя(ей) сказали Спасибо за это полезное сообщение:
ABTOMAT (06.04.2009), h1dd3n (06.04.2009), Harter (09.04.2009)