Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[optymalizacje, C++] Operator warunkowy VS instrukcja if

Ostatnio zmodyfikowano 2012-01-23 14:29
Autor Wiadomość
akwes
Temat założony przez niniejszego użytkownika
» 2012-01-22 18:57:06


call _printf

nie :P? Czemu pytasz?
P-49148
DejaVu
» 2012-01-22 23:16:49
Sugeruję włączyć optymalizator i wówczas porównywać wygenerowane kody ;p
P-49168
akwes
Temat założony przez niniejszego użytkownika
» 2012-01-22 23:29:51
Hm... Ale przecież wykonuje się zoptymalizowany kod ;>
P-49169
DejaVu
» 2012-01-22 23:32:42
Nie mówię o tym jak wygląda kod, tylko o tym jaki stopień optymalizacji ma stosować kompilator przy generowaniu kodu. To są dwie odrębne kwestie.
P-49170
akwes
Temat założony przez niniejszego użytkownika
» 2012-01-22 23:38:14
Ale ja nie mówiłem o kodzie C++.

Tylko o tym że jak kompilator zoptymalizuje kod asm, to wykonuje się zoptymalizowany kod asm, więc czemu porównywać kody nieoptymalizowane skoro normalnie uruchomi się optymalizowane?

Nie wiem czy się dobrze wyraziłem... No ale w każdym razie zaraz przestudiuję gcc i jak się wyłącza optymalizację.
P-49171
DejaVu
» 2012-01-22 23:40:47
Ale ja mówię o wŁĄczeniu MAKSYMALNEJ optymalizacji, a nie o wYłączeniu :)
P-49172
akwes
Temat założony przez niniejszego użytkownika
» 2012-01-22 23:44:03
Aaaaa xD Widzisz :D Wybacz, naprawdę źle przeczytałem.


gcc -S -O3 plik.cpp

Pierwszy kod

.file "ala.cpp"
.def ___main; .scl 2; .type 32; .endef
.text
.align 2
.p2align 4,,15
.globl _main
.def _main; .scl 2; .type 32; .endef
_main:
pushl %ebp
movl $16, %eax
movl %esp, %ebp
subl $8, %esp
andl $-16, %esp
call __alloca
call ___main
leave
xorl %eax, %eax
ret
Linii: 18!

Drugi kod

.file "ala.cpp"
.def ___main; .scl 2; .type 32; .endef
.text
.align 2
.p2align 4,,15
.globl _main
.def _main; .scl 2; .type 32; .endef
_main:
pushl %ebp
movl $16, %eax
movl %esp, %ebp
subl $8, %esp
andl $-16, %esp
call __alloca
call ___main
leave
xorl %eax, %eax
ret
Linii: 18!

Trzeci kod:

.file "ala.cpp"
.def ___main; .scl 2; .type 32; .endef
.text
.align 2
.p2align 4,,15
.globl _main
.def _main; .scl 2; .type 32; .endef
_main:
pushl %ebp
movl $16, %eax
movl %esp, %ebp
subl $8, %esp
andl $-16, %esp
call __alloca
call ___main
leave
xorl %eax, %eax
ret
Linii: 18!

Kod pekfosa

.file "ala.cpp"
.def ___main; .scl 2; .type 32; .endef
.section .rdata,"dr"
LC0:
.ascii "%d\0"
.text
.align 2
.p2align 4,,15
.globl _main
.def _main; .scl 2; .type 32; .endef
_main:
pushl %ebp
movl $16, %eax
movl %esp, %ebp
subl $8, %esp
andl $-16, %esp
call __alloca
call ___main
movl $LC0, (%esp)
movl $5, %eax
movl %eax, 4(%esp)
call _printf
leave
xorl %eax, %eax
ret
.def _printf; .scl 2; .type 32; .endef
Linii: 25 :)


Dlaczego w obecnych czasach kiedy jest więcej RAMu niż czasu kompilatory nie ustawiają optymalizacji wysokiej?

// edit

a tak z ciekawości, gdyby wartość zmiennej była nieznana, to optymalizacja przebiegła by zupełnie inaczej przecież :P ?
P-49173
ison
» 2012-01-23 00:00:47
dlaczego porównujesz kod pekfosa z wypisywaniem na standardowe wyjście z kodem, który tylko zmienia wartość zmiennej?
P-49174
1 « 2 » 3 4
Poprzednia strona Strona 2 z 4 Następna strona