AtmelStudio6 gcc

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. ?

???

Reply to
Zbynio
Loading thread data ...

Zbynio snipped-for-privacy@dont.pl napisał(a):

Zależy od wielu rzeczy, nie da się tego wytłumaczyć w jednym zdaniu. Poczytaj sobie

formatting link
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.

Reply to
Grzegorz Niemirowski

\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ć :-)

Reply to
Zbynio

W dniu 2013-04-15 01:56, Zbynio pisze:

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.

Reply to
Zbych

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.