問題タブ [fastmm]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
delphi - これはどのようにメモリリークですか?
FastMM は、次の行をメモリ リークの原因として報告します。
と はどうしたCopy
のMidStr
?これは Delphi 2007 コンパイラのバグだけですか、それともそれ以降のバージョンにもこの問題はありますか? ここに FastMM レポートのコピーへのリンクと、私のアプリケーションがこれらの種類のレポートを表示する方法の画像があります。ノードを表示するVirtualTreeView
には、新しいデータ型が必要です。私はそれを TMemoryLeak と呼んでいます。レポートを解析するときにTMemoryLeak
、クラス名、コールスタック、サイズなどを指定します。しかし、アプリがシャットダウンして FastMM が起動すると、上記のコピー行でメモリ リークが発生するようです。コールスタックのサイズ、オブジェクト全体の割り当てを解除しますが、文字列である ClassName フィールドは常にメモリをリークします。
更新(コメントから)
ここに宣言とコンストラクターとデコンストラクターがあります。寿命に関しては、オブジェクトがノードツリーを表示するために使用されるとすぐに、オブジェクトのデコンストラクターが呼び出されます。その後、それらは廃止され、割り当てが解除されます (希望します)。
delphi - FastMM を使用してメモリが割り当てられている場所を知る
Delphi 7 を使用して大規模なアプリケーションでメモリ使用量をデバッグしようとしています。fastmm デバッグ フル dll をインストールして、リークの問題を解決することができました。
また、メモリ使用トラッカーもインストールして、割り当てられたブロックとそのサイズを確認できるようにしました。
私の質問は、ブロックが割り当てられた場所を見つける方法はありますか? メモリが解放されなかった場合、スタック トレースが出力されるため、それが可能であることはわかっています。特定の割り当てのスタック トレースを出力するために fastmm を「突く」方法はありますか?
副次的な質問: 割り当ての開始アドレスがわかっている場合、オブジェクトがどのクラスであるかを調べる方法はありますか? (割り当てがオブジェクトに対するものであると仮定します。
algorithm - 高速多重極法の実装に関する推奨事項?
反発粒子のシステムを効率的にシミュレートするために、高速多重極法を実装することに興味があります。
FMMについて議論している参考文献の大規模なコレクションを見つけましたが、アルゴリズムを完全に理解したい非数学者にとって非常に親しみやすいものはないようです。
プロセスの背後にある数学を明確に説明し、適切な実装を例示する擬似コードを含む、基礎的なリファレンスをお勧めできますか?
delphi - RTL および VCL メモリ リーク
FullDebugMode で FastMM4 を使用してメモリリークを見つけています。UnicodeString
TList
TParameters
私の現在のメモリ リーク レポートは約 2 メガバイトで、その内容のほとんどはそのようなものです。何が起こっている?RTL
内部とそのVCL
内部のメモリリークの可能性について心配する必要がありますか? はいの場合、それらについて何ができますか?
delphi - ExpectedMemoryLeak の登録方法
D2010 でコード化された単純なコードから始めましょう。
FastMM4 はAddr(StringList)
as パラメータを使用してもメモリ リークを何度も報告するため、予想される MemoryLeak を登録する方法と、上記のメソッドが機能しない理由について事前に感謝します。
delphi - 複数の名前で同じ DLL 関数をエクスポートする
次のように、DLL でいくつかの関数を作成しました。
次に、2 つの名前でエクスポートしました。
ほとんどの場合、この「名前変更」は機能します。しかし、少なくとも 1 つのケースでは、名前が変更された関数 "DoThat" は、実際のファイルからではなく、void からデータを読み取ります。同じファイルで DoThis を呼び出すと、うまく機能します。FastMM4 のおかげですべてのメモリ リークを削除しました (コードを通常のコンソール アプリに変換しました)。
質問は次のとおりです。
この「名前の変更」は合法的な行為ではありませんか?
合法である場合、コンソール アプリに変更せずに FastMM4 で DLL をデバッグできますか?
delphi - dll のメモリ リークを検出するように FastMM を構成する方法
静的または動的にリンクされた dll でメモリ リークを検出する方法がわかりません。dll のリークを検出したいだけで、dll とアプリの間でメモリ マネージャーを共有したくありません。さらに、dll はランタイム パッケージとリンクされています。
サンプル dll は次のようになります。
アプリケーション dpr:
注: fastmm4 のコメントを外すと、アプリケーション (TStringList.Create) が原因のメモリリークは検出できますが、dll のリークは検出できません。
そして、アプリケーション本体では:
dll が静的に読み込まれている場合、FreeLibrary が呼び出されたとき、またはプログラムの終了時に FastMM からレポートが生成されることを期待していますが、何も起こりません。
さらに、FullDebugModeとClearLogFileOnStartupFastMM4Options.inc
を設定しただけで、FastMM_FullDebugMode.dllが出力ディレクトリにあります。
github にリポジトリを作成しました。私は何が欠けていますか?