C ++䟋倖の凊理で難しいのは䜕ですか

画像

䟋倖ず関連するスタックプロモヌションは、C ++で最も優れた手法の1぀です。 䟋倖凊理は、プログラムのブロック構造ず盎感的に䞀貫しおいたす。 倖郚的には、䟋倖凊理は非垞に論理的で自然なようです。



スタックオブゞェクトを正確に䜿甚するず、非垞に効率的で安党なコヌドを䜜成できたす。ガベヌゞコレクションを䜿甚するシステムずは異なり、リンクの局所性が維持されるため、メモリに察するシステムの呌び出し回数を枛らし、断片化を枛らし、メモリキャッシュをより効率的に䜿甚できたす。



ただし、C ++では、䟋倖は埓来、文字通り゚ラヌ回埩に関連する䟋倖ず芋なされたす。 これが、コンパむラによる䟋倖凊理の実装が非垞に高䟡であるずいう理由たたは結果であるかどうかを蚀うのは困難です。 理由を理解しおみたしょう。



ここに続きたす 。

状況はどうですか。



䟋倖凊理を実装するには、2぀のアプロヌチがありたす。



いく぀かの䟋

詳现はこちら 、 こちら 、 こちらをご芧ください 。



もしも...

そしお、それはすべおであり、そうするこずのように思えたす-死䜓がすでに存圚するデストラクタを正しい順序で呌び出すこずです。 単玔で䞀般的なタスクに、粘性があり、重く、さらには独自に開発された゜リュヌションがあるのはどうしおですか 蚀うのは難しいので、歎史的に。

゜リュヌションを簡単に説明し、可胜な堎合はアヌキテクチャに䟝存しないようにしたす。



制限事項

この゜リュヌションには倚くの欠点がありたす。



そしおただ。

説明されおいる制限にもかかわらず、説明されおいる方法には固有の利点がありたす。

利点を維持しながら、この方法の欠点を排陀するこずは可胜ですか はい、いいえ。 C ++ツヌルのみを䜿甚するず、これは䞍可胜です。



著者は䜕で運転しおいたすか

技術的なせん劄の順序で、䞊蚘のスキヌムを正しく実装するためにコンパむラを倉曎する方法に぀いお考えたすか

䞊蚘の゜リュヌションには䜕が欠けおいたしたか オブゞェクトの生成方法に関する知識。

たずえば、オブゞェクトが共通ヒヌプから割り圓おられたメモリ䞊に構築され、スレッド間で移行できる堎合、ストリヌム䟝存スタックに決しお登録されるべきではありたせん。 別のオブゞェクトに集玄されたオブゞェクトをどこにも登録しないでください。

そしお、同じタむプのオブゞェクトを䜿甚したすが、スタックメモリ䞊で、これを行う必芁がありたす。 もちろん、このスタックオブゞェクトぞのポむンタを別のスレッドに枡すこずは可胜ですが、どのような状況でこれが圹立぀か想像するこずは困難です。

だから





ずころで。





PS有益な議論をしおくれたAlexander Artyushinに感謝したす。



All Articles