問題タブ [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.

0 投票する
1 に答える
1645 参照

delphi - これはどのようにメモリリークですか?

FastMM は、次の行をメモリ リークの原因として報告します。

と はどうしたCopyMidStr?これは Delphi 2007 コンパイラのバグだけですか、それともそれ以降のバージョンにもこの問題はありますか? ここに FastMM レポートのコピーへのリンクと、私のアプリケーションがこれらの種類のレポートを表示する方法の画像があります。ノードを表示するVirtualTreeViewには、新しいデータ型が必要です。私はそれを TMemoryLeak と呼んでいます。レポートを解析するときにTMemoryLeak、クラス名、コールスタック、サイズなどを指定します。しかし、アプリがシャットダウンして FastMM が起動すると、上記のコピー行でメモリ リークが発生するようです。コールスタックのサイズ、オブジェクト全体の割り当てを解除しますが、文字列である ClassName フィールドは常にメモリをリークします。

更新(コメントから)

ここに宣言とコンストラクターとデコンストラクターがあります。寿命に関しては、オブジェクトがノードツリーを表示するために使用されるとすぐに、オブジェクトのデコンストラクターが呼び出されます。その後、それらは廃止され、割り当てが解除されます (希望します)。

0 投票する
3 に答える
2172 参照

delphi - FastMM を使用してメモリが割り当てられている場所を知る

Delphi 7 を使用して大規模なアプリケーションでメモリ使用量をデバッグしようとしています。fastmm デバッグ フル dll をインストールして、リークの問題を解決することができました。

また、メモリ使用トラッカーもインストールして、割り当てられたブロックとそのサイズを確認できるようにしました。

私の質問は、ブロックが割り当てられた場所を見つける方法はありますか? メモリが解放されなかった場合、スタック トレースが出力されるため、それが可能であることはわかっています。特定の割り当てのスタック トレースを出力するために fastmm を「突く」方法はありますか?

副次的な質問: 割り当ての開始アドレスがわかっている場合、オブジェクトがどのクラスであるかを調べる方法はありますか? (割り当てがオブジェクトに対するものであると仮定します。

0 投票する
3 に答える
2686 参照

algorithm - 高速多重極法の実装に関する推奨事項?

反発粒子のシステムを効率的にシミュレートするために、高速多重極法を実装することに興味があります。

FMMについて議論している参考文献の大規模なコレクションを見つけましたが、アルゴリズムを完全に理解したい非数学者にとって非常に親しみやすいものはないようです。

プロセスの背後にある数学を明確に説明し、適切な実装を例示する擬似コードを含む、基礎的なリファレンスをお勧めできますか?

0 投票する
1 に答える
962 参照

delphi - RTL および VCL メモリ リーク

FullDebugMode で FastMM4 を使用してメモリリークを見つけています。UnicodeStringTListTParameters

私の現在のメモリ リーク レポートは約 2 メガバイトで、その内容のほとんどはそのようなものです。何が起こっている?RTL内部とそのVCL内部のメモリリークの可能性について心配する必要がありますか? はいの場合、それらについて何ができますか?

0 投票する
1 に答える
853 参照

delphi - ExpectedMemoryLeak の登録方法

D2010 でコード化された単純なコードから始めましょう。

FastMM4 はAddr(StringList)as パラメータを使用してもメモリ リークを何度も報告するため、予想される MemoryLeak を登録する方法と、上記のメソッドが機能しない理由について事前に感謝します。

0 投票する
1 に答える
643 参照

delphi - 複数の名前で同じ DLL 関数をエクスポートする

次のように、DLL でいくつかの関数を作成しました。

次に、2 つの名前でエクスポートしました。

ほとんどの場合、この「名前変更」は機能します。しかし、少なくとも 1 つのケースでは、名前が変更された関数 "DoThat" は、実際のファイルからではなく、void からデータを読み取ります。同じファイルで DoThis を呼び出すと、うまく機能します。FastMM4 のおかげですべてのメモリ リークを削除しました (コードを通常のコンソール アプリに変換しました)。

質問は次のとおりです。

この「名前の変更」は合法的な行為ではありませんか?

合法である場合、コンソール アプリに変更せずに FastMM4 で DLL をデバッグできますか?

0 投票する
2 に答える
8659 参照

delphi - dll のメモリ リークを検出するように FastMM を構成する方法

静的または動的にリンクされた dll でメモリ リークを検出する方法がわかりません。dll のリークを検出したいだけで、dll とアプリの間でメモリ マネージャーを共有したくありません。さらに、dll はランタイム パッケージとリンクされています。

サンプル dll は次のようになります。

アプリケーション dpr:

注: fastmm4 のコメントを外すと、アプリケーション (TStringList.Create) が原因のメモリリークは検出できますが、dll のリークは検出できません。

そして、アプリケーション本体では:

dll が静的に読み込まれている場合、FreeLibrary が呼び出されたとき、またはプログラムの終了時に FastMM からレポートが生成されることを期待していますが、何も起こりません。

さらに、FullDebugModeClearLogFileOnStartupFastMM4Options.incを設定しただけで、FastMM_FullDebugMode.dllが出力ディレクトリにあります。

github にリポジトリを作成しました。私は何が欠けていますか?