Termeszetesen semmi ertelme egy ciklusban novelni egy valtozot, ez csak keslelteti a futast. Egy jo fordito ezt okosan kioptimalizalna. Lassuk:
gcc -O3 forditoteszt.c
./a.out
^C
Turelmesen varunk, nem tortenik semmi, kilepunk. Hat ez nem lett gyorsabb.
Nezzuk mi lett belole forditas utan:
gcc -O3 -S forditoteszt.c
cat forditoteszt.s
...
.L2:
jmp .L2
...
Szep vegtelen ciklus. Ugyes. Amugy -O2-re is ez a helyzet, pedig ez az ajanlott. A -O1 viszont mukodik.
- Nyosigomboc blogja
- A hozzászóláshoz be kell jelentkezni
- 913 megtekintés
Hozzászólások
> Termeszetesen semmi ertelme egy ciklusban novelni egy valtozot, ez csak keslelteti a futast.
Tekintve, hogy az a ciklusváltozó, ez azért picit meggondolalan dolognak tűnik. (Pl. azért, mert van pár ciklus, ami ugye ezen alapszik. Mint mondjuk a fenti.) Szóval rendes bug ez, április elsejétől függetlenül - már ha valóban így működik. Mert nekem az alapértelmezett O2-re és a kézzel kiadott O3-ra is szépen működik. gcc (GCC) 4.2.1 20070719 [FreeBSD]
- A hozzászóláshoz be kell jelentkezni
Nalam ez a verzio, es a fenti tunetet produkalja (datumtol fuggetlenul, csak epp ma talaltam).
nyos@nyos:~/src$ gcc --version
gcc (Ubuntu 4.3.2-1ubuntu12) 4.3.2
Copyright (C) 2008 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
A "semmi ertelme"-t ugy ertettem, hogy egy ures ciklus, ami a ciklusvaltozot valtoztatja csak, ezen tul semmit nem csinal. Szoval ennyi erovel lehetne ott egy n="valami architekturafuggo negativ szam" is. Ami nyilvan gyorsabb, tehat arra optimalizalhato.
--
I don't always dress in a T-shirt and jeans. Sometimes people give me awards, and I dress like a penguin instead. - Linus Torvalds
- A hozzászóláshoz be kell jelentkezni
Milyen architekturat hasznalsz?
ARM-on nalam is helyesen mukodik, csak 32 bites x86-on hibas.
.L5:
adds r3, r3, #1
bpl .L5
Igaz, ott a fordito is joval regebbi: GCC: (GNU) 2.95.1 19990816 (release)
--
I don't always dress in a T-shirt and jeans. Sometimes people give me awards, and I dress like a penguin instead. - Linus Torvalds
- A hozzászóláshoz be kell jelentkezni
32-bites x86
- A hozzászóláshoz be kell jelentkezni
Nem hiszem, hogy bug volna. Csak "undefined behaviour": http://www.airs.com/blog/archives/120. Viszont warning-ot is csak az oldalon talalhato peldara kapok:
int f()
{
int i;
int j = 0;
for (i = 1; i > 0; i += i)
++j;
return j;
}
overflow.c: In function 'main':
overflow.c:3: warning: assuming signed overflow does not occur when simplifying conditional to constant
- A hozzászóláshoz be kell jelentkezni
undefined behaviour
--
When in doubt, use brute force.
- A hozzászóláshoz be kell jelentkezni
Valoban. Ez szivas, ezek szerint at kell irnom a Brainfuck interpreteremet is, hogy megfeleljen a szabvanynak.
--
I don't always dress in a T-shirt and jeans. Sometimes people give me awards, and I dress like a penguin instead. - Linus Torvalds
- A hozzászóláshoz be kell jelentkezni
hehe, multkor en is irtam egyet, vicces dolog :)
--
When in doubt, use brute force.
- A hozzászóláshoz be kell jelentkezni