jos tekee jonkun funktion joka ei muuta mitenkään sen ulkopuolella olevia muuttujia ja jonka paluuarvo riippuu ainoastaan siihen syötetyistä parametreista eikä funktio muuta parametrejä mitenkään, niin jos jonkin muuttujan arvoksi asettaa nyt tämän funktion palautusarvon, niin optimoiko kääntäjä niin että se laskee palautusarvon heti käännösaikana eli kutsuu funktioita ja asettaa muuttujan arvoksi sen välittömästi?
optimointikysymys
optimimies
5469
0Äänestä
Muut lukivat myös
Odottaa vastausta
Näihin keskusteluihin ei ole vielä vastattu. Ole ensimmäinen.
Vastaukset 5
Vanhimmat
"optimoiko kääntäjä niin että se laskee palautusarvon heti käännösaikana eli kutsuu funktioita ja asettaa muuttujan arvoksi sen välittömästi?"
ööh?? eihän niitä funktioita kääntämisen aikana suoriteta sitten millään lailla. siinä vaan niinku käännetään se binääri ohjelma joka sitten suoritetaan.
tästä en kyllä tiedä:
int main()
{
int c=seen_arvo();
return 0;
}
seen_arvo(){return 23;}
tuohan on siis periaatteessa sama kuin int c=23;
mutta tuskinpa se kääntäjä sitä niin muokkaa.
jos pistää mikkistyyliin ni inline vaan jokakohtaan!
sori typot.. onn hieman alkoholia ottana :D
Yleisesti näin ei voi tehdä, koska funktioista ei voi päättää, pysähtyykö niiden suoritus ikinä. Tämä toki onnistuu erityisillä funktioilla, jotka ovat sopivan helppoja, mutta yleinen ratkaisu on mahdoton. Tämä on ns. halting problem.
Joissakin tapauksissa tällaiset optimoinnit ovat mahdollisia, ja esim. gcc:n -ffast-math -optio tekee kaikenlaisia matematiikkaoptimointeja aika tehokkaasti.
Tällaiset kuvaamasi kaltaiset matalan tason optimoinnit kannattaa kuitenkin jättää sopivaan kehitysvaiheeseen ja käydä kohta kohdalta läpi ihan erikseen testaamalla. Niillä on merkitystä vasta kun tietää, missä ohjelman kriittiset kohdat ovat. Ensisijainen tehokkuuden lähde on aina tehokkaiden algoritmien käyttö.
saa vipan päälle, jolloin poistaa mm. kaikki ne funktiot ja kikkulat pois joita ei kutsuta tai ei käytetä.
On aikaa kun viimeksi olen mämmiä silläkään tehnyt, mutta sellainen kutina on, että se laskeskeli asioita vakioiksi jos sellaiseen mahdollisuuden huomasi?
Mutta nopeutta saa jos laitat vaikka
inline seen_arvo()
{
return 23;
}
miksi ei laita sitten suoraan
c = 23;
Mihin kummaan tuota inline funcktiota tarvitaan.
PS.
inlineä ei ole C standardissa, että sillai.