Mitä funktion rivittäminen tarkoittaa ja miten se vaikuttaa ohjelmaan?

Vastaus

Inline-funktio on funktio, jonka kohdalla kääntäjä kopioi funktiomäärittelyn koodin suoraan kutsuvan funktion koodiin sen sijaan, että se loisi erillisen ohjejoukon muistiin. Näin eliminoidaan kutsulinkityksen yleiskustannuksia ja voidaan paljastaa merkittäviä optimointimahdollisuuksia. ”inline”-spesifikaattorin käyttäminen on vain ehdotus kääntäjälle, että inline-laajennus voidaan suorittaa; kääntäjä voi vapaasti jättää ehdotuksen huomioimatta.
Joitakin inliningin vaikutuksia ovat:

  1. Useimmissa tapauksissa inlining kasvattaa ohjelman kokoa. Mutta joissakin tapauksissa, kun funktion koko on pienempi kuin funktiokutsukoodin koko, sisäistäminen voi pienentää ohjelman kokoa.
  2. Useimmissa tapauksissa sisäistäminen voi parantaa suoritusaikaa välttämällä kutsukoodin päällekkäisyyksiä, ja optimoija voi mahdollisesti nähdä sen läpi (tekemällä siitä ei-epäselvän funktion) saadakseen lisää optimointimahdollisuuksia. Jos funktiota ei kuitenkaan kutsuta usein, sillä ei ole näkyvää parannusta ajoaikaan.
  3. Sisällyttäminen lisää käytännön kytkentää, kun kutsuja joutuu mahdollisesti luottamaan sisäistetyn koodin sisäisiin toteutuksen yksityiskohtiin. Käytännön kytkennän ongelmana on, että kun inlineerattu kutsuja muuttuu, joudut kääntämään kutsujan uudelleen. Tämä on kustannus rakennus- ja kehitysajalle.

Paras lähestymistapa olisi pidättäytyä rivittämästä koodia, kunnes olet profiloinut ohjelmasi loppuun. Tämä auttaa määrittämään, saatko mitään lisähyötyä rivittämisestä.

Vastaa

Sähköpostiosoitettasi ei julkaista.