-
1. Data: 2013-04-14 23:37:11
Temat: AtmelStudio6 gcc
Od: "Zbynio" <...@d...pl>
Pytanie :-) Może głupie może nie. :-)
Powiedzcie mi czy mam walczyć z kompilatorem w taki sposób żeby sam zapis w
języku C był możliwie pozbawiony podfunkcji?
Czy może dla czystości kodu powinienem się skupić na problemie do
rozwiązania, a nie nad sposobem zapisu?
NP:
a() {
...
}
b() {
...
}
foo {
a();
b();
...
}
Czy może powinienem za wszelką cenę zapisywać ciała funkcji a i b wewnątrz
funkcji foo ? Analizując assembler mam mieszane uczucia. Raz mi się tworzą
call-e / rcall-e a raz kod jest strasznie posiekany ale nie wynika, że mi
calluje tylko jakby sobie je wkleił i wiedział, że to nie jest konieczne
żeby rekursywnie wywoływać a() i b() ?
No jak to jest ? Od czego to zależy kiedy kompilator wie co z tym zrobić
?Często na PC widzę czyjeś źródłą posiekane na dziesiątki małych funkcji,
później jedna jest w drugiej, a trzecia w czwartej jak ruskie babuszki. ?
???
-
2. Data: 2013-04-15 01:10:50
Temat: Re: AtmelStudio6 gcc
Od: "Grzegorz Niemirowski" <g...@p...onet.pl>
Zbynio <...@d...pl> napisał(a):
> Pytanie :-) Może głupie może nie. :-)
> Powiedzcie mi czy mam walczyć z kompilatorem w taki sposób żeby sam
> zapis w języku C był możliwie pozbawiony podfunkcji?
> Czy może dla czystości kodu powinienem się skupić na problemie do
> rozwiązania, a nie nad sposobem zapisu?
> NP:
> a() {
> ...
> }
> b() {
> ...
> }
> foo {
> a();
> b();
> ...
> }
> Czy może powinienem za wszelką cenę zapisywać ciała funkcji a i b
> wewnątrz funkcji foo ? Analizując assembler mam mieszane uczucia. Raz
> mi się tworzą call-e / rcall-e a raz kod jest strasznie posiekany ale
> nie wynika, że mi calluje tylko jakby sobie je wkleił i wiedział, że to
> nie jest konieczne żeby rekursywnie wywoływać a() i b() ?
> No jak to jest ? Od czego to zależy kiedy kompilator wie co z tym zrobić
> ?Często na PC widzę czyjeś źródłą posiekane na dziesiątki małych funkcji,
> później jedna jest w drugiej, a trzecia w czwartej jak ruskie babuszki. ?
> ???
Zależy od wielu rzeczy, nie da się tego wytłumaczyć w jednym zdaniu.
Poczytaj sobie
http://gcc.gnu.org/onlinedocs/gcc-4.7.0/gcc/Optimize
-Options.html Zobacz,
ile tam jest opcji konfiguracyjnych optymalizację oraz jak często pojawia
się w ich opisie odniesienie do heurystyki. Czasem heurystyka może
stwierdzić, że inline się opłaca, a innym razem, że nie.
--
Grzegorz Niemirowski
http://www.grzegorz.net/
OE PowerTool i Outlook Express: http://www.grzegorz.net/oe/
Uptime: 3 days, 6 hours, 32 minutes and 23 seconds
-
3. Data: 2013-04-15 01:56:12
Temat: Re: AtmelStudio6 gcc
Od: "Zbynio" <...@d...pl>
"Grzegorz Niemirowski" <g...@p...onet.pl> wrote in message
news:kkfd21$tva$1@news.icpnet.pl...
> Zależy od wielu rzeczy, nie da się tego wytłumaczyć w jednym zdaniu.
> Poczytaj sobie
> http://gcc.gnu.org/onlinedocs/gcc-4.7.0/gcc/Optimize
-Options.html Zobacz,
> ile tam jest opcji konfiguracyjnych optymalizację oraz jak często pojawia
> się w ich opisie odniesienie do heurystyki. Czasem heurystyka może
> stwierdzić, że inline się opłaca, a innym razem, że nie.
\Ja wiem, czytałem to nie raz :-) I atmelowskie opracowania i tyle samo wiem
co wcześniej :-)
Ogólnie to trzeba obserwować jak przyrasta kodu po kolejnej kompilacji i
debugować :-)
-
4. Data: 2013-04-15 07:47:13
Temat: Re: AtmelStudio6 gcc
Od: Zbych <a...@o...pl>
W dniu 2013-04-15 01:56, Zbynio pisze:
>
> "Grzegorz Niemirowski" <g...@p...onet.pl> wrote in message
> news:kkfd21$tva$1@news.icpnet.pl...
>
>> Zależy od wielu rzeczy, nie da się tego wytłumaczyć w jednym zdaniu.
>> Poczytaj sobie
>> http://gcc.gnu.org/onlinedocs/gcc-4.7.0/gcc/Optimize
-Options.html
>> Zobacz, ile tam jest opcji konfiguracyjnych optymalizację oraz jak
>> często pojawia się w ich opisie odniesienie do heurystyki. Czasem
>> heurystyka może stwierdzić, że inline się opłaca, a innym razem, że nie.
>
> \Ja wiem, czytałem to nie raz :-) I atmelowskie opracowania i tyle samo
> wiem co wcześniej :-)
> Ogólnie to trzeba obserwować jak przyrasta kodu po kolejnej kompilacji i
> debugować :-)
Gcc można zmusić do inline'owania atrybutem always_inline:
__attribute__((always_inline)) void foo(const char c) {
... some code
}
Oczywiście funkcja musi być widoczna w danej jednostce kompilacji.