optimointikysymys

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?
5469
Äänestä

Muut lukivat myös

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

Äänestä

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

Äänestä
  • 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?

    Äänestä

  • C-kääntäjästä kirjoitti:

    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;
    }

    Äänestä

  • popupikkuna kirjoitti:

    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.

    Äänestä

Kommentoi aloitusta


optimimies kirjoitti:

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?

Anonyymi
5000

Ilmoita asiaton sisältö

  • Sisältää materiaalia, joka on loukkaavaa, herjaavaa, rasistista, uhkailevaa tai ahdistelevaa.

  • Materiaali sisältää nimiä, yhteystietoja tai muita henkilökohtaisia tietoja. Julkisuuden henkilöistä, julkisissa viroissa toimivista ihmisistä sekä yritysten vastuuhenkilöistä saa keskustella työhön liittyen. Myös yksityiselämään liittyvistä asioista voi keskustella siltä osin, kuin niistä on julkisesti kerrottu.

  • Sisältää lapsille haitallista tai heiltä kiellettyä materiaalia. Seksuaalinen sisältö on sallittua aiheeseen tarkoitetuilla palstoilla, joiden ikäraja on 18 vuotta.

  • Lainvastaista sisältöä voi olla mm. yksityiselämää loukkaavan tiedon levitys, kiihottaminen kansanryhmää vastaan, laiton uhkaaminen, alaikäisiin liittyvä seksuaalinen sisältö/grooming, petokset, identiteettivarkaudet, kunnianloukkaukset ja tekijänoikeusrikkomukset.

  • Sisältö ei liity palstan tai keskusteluketjun aiheeseen.

  • Viesti ei ole suomea tai ruotsia (pl. International Forums), se sisältää mainontaa, se sisältää tekijänoikeuksin suojattua materiaalia, se on massapostitus tai jokin muu syy.

Jaa keskustelu