www.wikidata.uk-ua.nina.az
Polipshennya povernennya znachennya angl return value optimization RVO chi prosto PPZ ce tehnika optimizaciyi yaku zastosovuye kompilyator sho sered inshogo viklyuchaye stvorennya timchasovogo ob yekta dlya zberezhennya znachennya sho vertayetsya z funkciyi 1 V C vona osoblivo primitna tim sho dozvolyaye zminiti povedinku otrimanoyi programi 2 Zmist 1 Pidsumok 2 Poyasnennya 3 Pidtrimka kompilyatorami 4 PrimitkiPidsumok RedaguvatiZagalom standart S dozvolyaye kompilyatoram zastosovuvati bud yaki optimizaciyi dopoki otrimanij vikonuvanij fajl povoditsya tak nache vsi vimogi standartu bulo vikonano Cej pidhid zazvichaj zgaduyetsya yak pravilo tak nache angl as if rule 3 Termin polipshennya povernennya znachennya zvertayetsya do punktu v ISO IEC 14882 yakij dozvolyaye realizaciyi opustiti kopiyuvannya sho vidbuvayetsya cherez instrukciyu povernennya navit yaksho konstruktor kopiyuvannya maye pobichni efekti 4 hocha ce j ne dozvolyayetsya samim pravilom tak nache 3 Nastupnij priklad pokazuye hid dij za yakogo realizaciya mozhe pozbutis odnogo chi dvoh kopiyuvan navit yaksho konstruktor kopiyuvannya maye vidimi pobichni efekti primirom rozdruk tekstu 4 Pershe kopiyuvannya yakogo mozhna uniknuti kopiyuvannya stvorenogo ekzemplyaru klasu C u znachennya sho poverne funkciya f Druge kopiyuvannya timchasovogo ob yekta povernutogo funkciyeyu f u obj include lt iostream gt struct C C C const C amp std cout lt lt Vidbulos kopiyuvannya n C f return C int main std cout lt lt Zdorovenki buli n C obj f Zalezhno vid kompilyatora ta jogo nalashtuvan programa mozhe vivesti takij tekst Zdorovenki buli Vidbulos kopiyuvannya Vidbulos kopiyuvannya Zdorovenki buli Vidbulos kopiyuvannya Zdorovenki buli Poyasnennya RedaguvatiPri poverneni vbudovanogo tipu z funkciyi dodatkovih operacij zazvichaj ne vikonuyetsya oskilki ob yekt peredayetsya cherez registr Vertannya bilshih ob yektiv ekzemplyaru deyakogo klasu mozhe vimagati kopiyuvannya z odniyeyi miscini v pam yati do inshoyi Dlya cogo u stekovomu kadri stvoryuyetsya prihovanij ob yekt adresa yakogo peredayetsya u funkciyu Znachennya sho povertayetsya z funkciyi kopiyuyetsya v cej ob yekt za nadanoyu adresoyu 5 Otzhe dlya kodu na kshtalt struct Data char bytes 16 Data f Data result utvorennya rezultatu return result int main Data d f kompilyator zgeneruye take struct Data char bytes 16 Data f Data hiddenAddress Data result kopiyuvannya rezultatu v prihovanij ob yekt hiddenAddress result return hiddenAddress int main Data hidden stvoriti prihovanij ob yekt Data d f amp hidden kopiyuvati rezultat v d Yak bachimo dvichi vikonuyetsya kopiyuvannya ob yekta Data Na rannih stadiyah rozvitku C nezdatnist movi efektivno povernuti ob yekt klasu z funkciyi vvazhalas odnim z yiyi nedolikiv 6 Blizko 1991 Volter Brajt vinajshov sposib zmenshennya kilkosti kopiyuvan vikoristovuyuchi zamist dvoh ob yektiv prihovanogo ta lokalnoyi zminnoyi funkciyi f odin u yakij zberigayetsya rezultat 7 struct Data char bytes 16 void f Data p zapisuyemo rezultat odrazu v p int main Data d f amp d Brajt realizuvav svoye polipshennya v kompilyatori Zortech C 6 Cej osoblivij sposib buv z chasom nazvanij Polipshennya povernennya imenovanogo znachennya angl named return value optimization vkazuyuchi na toj fakt sho kopiyuvannya imenovanogo ob yekta skasovane 7 Pidtrimka kompilyatorami RedaguvatiPolipshennya povernennya znachennya pidtrimuyetsya bilshistyu kompilyatoriv 1 8 9 Odnak mozhlivi umovi koli kompilyator ne mozhe vikonati polipshennya Najposhirenishim ye priklad koli funkciya povertaye rizni znachennya v zalezhnosti vid shlyahu vikonannya programi 8 10 5 include lt string gt std string f bool cond false std string first first std string second second funkciya mozhe povernuti odin iz dvoh imenovanih ob yektiv zalezhno vid parametra PPZ ne mozhe buti zastosovane return cond first second int main std string result f Primitki Redaguvati a b Meyers Scott 1996 More Effective C Addison Wesley Alexandrescu Andrei 1 lyutogo 2003 Move Constructors Dr Dobbs Journal Arhiv originalu za 14 lipnya 2013 Procitovano 25 bereznya 2009 a b ISO IEC 2003 ISO IEC 14882 2003 E Programming Languages C 1 9 Program execution intro execution para 1 a b ISO IEC 2003 ISO IEC 14882 2003 E Programming Languages C 12 8 Copying class objects class copy para 15 a b Bulka Dov David Mayhew 2000 Efficient C Addison Wesley ISBN 0 201 37950 3 a b Lippman Stan The Name Return Value Optimization Stan Lippman Arhiv originalu za 14 lipnya 2013 Procitovano 23 bereznya 2009 a b Glossary D Programming Language 2 0 Digital Mars Arhiv originalu za 14 lipnya 2013 Procitovano 23 bereznya 2009 a b Shoukry Ayman B Named Return Value Optimization in Visual C 2005 Microsoft Arhiv originalu za 14 lipnya 2013 Procitovano 20 bereznya 2009 Options Controlling C Dialect GCC 17 bereznya 2001 Arhiv originalu za 14 lipnya 2013 Procitovano 20 bereznya 2009 Hinnant Howard et al 10 veresnya 2002 N1377 A Proposal to Add Move Semantics Support to the C Language WG21 Arhiv originalu za 8 lyutogo 2007 Procitovano 25 bereznya 2009 Otrimano z https uk wikipedia org w index php title Polipshennya povernennya znachennya amp oldid 34839336