0

メモリ リークが遅いと思われるレガシー C++ アプリケーションを保守しています。現在の構成で例外がスローされないようにすることで、メモリリークを「修正」することができました。また、多くの例外が発生するように構成することで、リークをトリガーしてスケーリングすることもできます。

割り当てられるすべてのメモリは、malloc() ではなく alloca() を使用して行われます。これについて私が説明したのは、alloca() が Java ガベージ コレクターのように機能し、コンテキストを終了するときにメモリを自動的に解放するためだということです。

リークがスローされる例外に明確にバインドされているため、例外がスローされたときに alloca() がメモリを解放できないという理論があります。

これはまったくもっともらしいですか?true の場合は alloca() の重大な欠陥だと思いますが、alloca() をグーグルで検索すると、一般的に問題になるようです。

専門家の洞察をいただければ幸いです。

4

3 に答える 3

3

この問題は、ある程度の間接性が原因である可能性があります。

文字通りの質問は、「alloca例外がスローされた場合、メモリを返しますか?」です。その答えは次のとおりです。直接割り当てられたメモリのみを返します。デストラクタは実行されず、割り当てられたallocaメモリ内の所有ポインタはリークされます。

于 2018-12-14T10:43:44.297 に答える