AtmelStudio6 gcc

Apr 14, 2013 3 Replies

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



???


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.

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

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.

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required