タグ

ブックマーク / www.akamoz.jp (1)

  • You - 雲丹のごった煮

    g++でプログラムを組んでいて、意外に実行速度の邪魔になるのが例外処理のスタック巻き戻しコード。 スタック巻き戻しコードとは、ある関数が他の関数を呼び出し、呼び出し先で例外が発生した場合に、呼び出し元が実行すべきデストラクタを津々浦々、粛々と呼び出すためのコード。 通常、関数に入ったところでデストラクタ呼び出し部分を登録して、関数を出るところで登録を抹消する。 例えばこんなコード。 class C { public: ~C(); }; void bar(); void foo() { C c; bar(); } g++ -O2 -S とすると、こんな長いコードが生成される。ちなみにCygwin付属のgcc 3.4.4にてコンパイル。 __Z3foov: pushl %ebp movl %esp, %ebp leal -24(%ebp), %eax subl $120, %esp movl

  • 1