Det er en av optimaliseringsmetodene som brukes av programmerere for å fremskynde utførelsen av tidsfølsomme seksjoner av kode av kompilatorer. Overhead av en funksjonsanrop kan fjernes ved inlining en funksjon, som gjør det mulig for kompilatoren å erstatte funksjonssamtalen med funksjonens faktiske innhold.
Hvordan bruke inline -funksjoner i C++
Å bruke inline -funksjoner I C ++ må du ta med nøkkelordet 'på linje' Før funksjonserklæringen. Her er et eksempel:
inline int add (int a, int b)De 'på linje' Nøkkelord informerer kompilatoren for å erstatte en samtale til funksjonen gjennom programmets kode med funksjonens faktiske kode. Funksjonsdefinisjonen endres umiddelbart ved anropinstruksjonen i stedet for å bli lagret sammen med instruksjonens minneadresse og lastes inn i minnet.
Det er viktig å huske på at på linje Nøkkelord ber kompilatoren om noe i stedet for å gi det en kommando. I noen tilfeller kan kompilatoren bestemme seg for ikke å inline funksjonen. Derfor kan du bruke en makro i stedet for å definere på linje.
Eksempel på inline -funksjoner
Følgende er koden som skal brukes inline -funksjoner I C ++:
#inkludereI programmet over, funksjonen setNum () identifiseres som en inline -funksjon Bruke uttrykket "på linje". Kompilatoren erstatter anropserklæringen med definisjonen av setNum () Når denne inline -funksjonen kalles. Som et resultat erstatter instruksjonen 5 med setNum () og lagrer 5 i variabelen n.
Produksjon
Når skal du bruke inline -funksjoner i C++?
Selv om overhead for hver funksjonsanrop raskt kan montere, inline -funksjoner kan øke hastigheten i programmer som ringer mange mindre funksjonssamtaler betydelig. Likevel, Inlining Funksjoner er ikke alltid den ideelle strategien fordi den kan gjøre koden større og potensielt gjøre CPUs hurtigbufringssystem mindre effektiv.
Når du bestemmer om det skal inline en funksjon, Det er flere ting å vurdere.
1: Størrelsen på funksjonen
Størrelsen på funksjonen er et av de mest avgjørende elementene. Mindre funksjoner er vanligvis bedre kandidater til inlining Siden de har mindre sannsynlighet for å påvirke størrelsen på koden og CPU -hurtigbufringen negativt. Siden overhead av funksjonssamtaler kan utgjøre en flaskehals, er funksjoner som kalles ofte eller i nære løkker egnede kandidater til inlining.
2: Optimaliseringsnivå
Kompilatorens optimaliseringsnivå bør også vurderes. De fleste moderne kompilatorer har en "på linje" nøkkelord som kan brukes til å foreslå at en funksjon være inlined; Likevel, hvis kompilatoren dømmer at det ikke ville være noen hastighetsfordel, kan den fortsatt bestemme seg for ikke å inline funksjonen. Høyere optimaliseringsnivå er der kompilatorer ofte gjør mer aggressive optimaliseringer, så funksjoner som ikke er inlined på lavere nivåer kan også være inlined på høyere nivåer.
3: Effekten av inlining
Det er også viktig å vurdere virkningen av inlining på kodestørrelse. Samtidig som inlining Kan forbedre ytelsen ved å redusere overhead for funksjonssamtaler, det kan også øke størrelsen på koden, og potensielt redusere effektiviteten til CPUs hurtigbufringssystem. Generelt er funksjoner som er for store eller som inneholder løkker eller statiske variabler, dårlige kandidater for inlining.
4: Mikroarkitekturprogrammering
Inline -funksjoner brukes mest i mikroarkitekturprogrammering, i tilfeller der overheadkostnadene for funksjonssamtaler er viktige. Det er også verdifullt å lage små hjelperrutiner eller vurderere som kalles gjentatte ganger gjennom hele koden.
Konklusjon
Inline -funksjoner I C ++ er kraftige funksjoner for å forbedre programmets ytelse, men det er viktig å nøye vurdere virkningen av inlining på kodestørrelse, CPU -hurtigbufring og optimaliseringsnivå. Ved å velge nøye hvilke funksjoner som skal inline og på hvilket optimaliseringsnivå, kan utviklere oppnå betydelige ytelsesforbedringer uten å ofre kodestørrelse eller lesbarhet.