問題タブ [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 - Delphi 7.0 とメモリ リーク?
FastMM4 で示されたようにメモリ リークを引き起こす可能性のあるコードを取り除くために FastMM4 で時間を費やした後、Windows 7 で約 1 か月ノンストップでソフトウェアを実行してテストしました。ソフトウェア プロセスのタスク マネージャー。
これは、ソフトウェアでメモリ リークが発生していることを意味しますか? 私は混乱し、心配しています。
前もって感謝します、
string - FastMM4を使用して、リークされた文字列を登録する方法は?
FastMM4を使用すると、リークされたポインタを簡単に登録できますが、リークされた文字列を登録することはできません。どうやら、@
文字列に適用された演算子は、実際には文字列全体を提供しているわけではなく、PChar(string)
;も提供していません。リークされた文字列を適切に登録するために何を使用できますか?
今のところ私はこの作品を見つけました:
しかし、それは魔法の数に依存しており、それは12
バージョンに依存しており、コードは実際に何が起こっているのかを表現していません。文字列を受け取り、文字列の「ベース」へのポインタを返すRTL関数、またはFastMM4
私が見落としていたメソッドがどこかにあることを願っています。
私はその醜い表現の獣をこのような手順で詰めることができますが、それでもそれはハッキーだと思います:
これは質問には関係ないはずです。これが私が文字列を漏らしている理由です:
アプリケーションの存続期間中、特定のデータを保存するためにキャッシュメカニズムを使用しています。これらのオブジェクトを解放するつもりはありません。アプリケーションの存続期間中はオブジェクトが必要であり、適切なファイナライズを実行するのは、アプリケーションのシャットダウン時の時間を無駄にするだけだからです。これらのオブジェクトにはいくつかの文字列フィールドが含まれているため、明らかにこれらの文字列は「リーク」されます。
delphi - Delphi XE で FastMM メモリ リーク レポートをオン/オフするにはどうすればよいですか?
Delphi XE で FastMM メモリ リーク レポートをオン/オフするにはどうすればよいですか? Delphi 7 では、inc ファイルを変更する必要がありました。しかし、Delphi XE には FastMM が既に統合されていると聞いています。FastMM 設定にアクセスするにはどうすればよいですか?
Delphi ヘルプからこれを入手しました。
メモリ マネージャー (FastMM) の完全なソース コードは、SourceForge で入手できます。
FastMM のフル バージョンでは、ヒープの破損やメモリ リークの検出に役立つ特別な「デバッグ」モードでメモリ マネージャを実行できます。FastMM のフル バージョンの追加機能:
ダブル フリー オブジェクト/インターフェイス
ファイルのログとレポート
詳細については、FastMM ソース コード (FastMM4.pas および FastMM4Options.inc) 内のコメントを参照してください。
そのため、FastMM を手動でインストールする必要があるようです。しかし、プロジェクトのUSES句に「FastMM4」を含める必要がありますか?
delphi - FastMMは、仮想メモリの予約と、配列を拡張するためのチャンクの呼び出しをサポートしていますか?
VirtualAllocを使用して仮想メモリを予約できることはわかっています。
たとえば、1 GBの仮想メモリを要求し、その最初のMBを呼び出して、増大するアレイを配置できます。
配列が1MBを超えると、2番目のMBを呼び出します。
このように、アレイが大きくなったときにアレイをメモリ内で移動する必要はありません。アレイはそのまま残り、Intel/AMD仮想メモリマネージャが問題を処理します。
ただし、FastMMはこの構造をサポートしているので、独自のメモリ管理を行う必要はありませんか?
擬似コード:
FastMMはこれをサポートしていますか?
delphi - FastMM がメモリ リークを検出できない
Delphi5 のアプリケーションで FastMM 4.97 を使用しています。
テスト目的で意図的なリークを使用して IDE からアプリケーションを実行すると、すべてがうまく機能します。適切な通知とエラー ログが表示されます。
ただし、IDE の外部でアプリケーションを実行しても何も起こりません (たとえば、Windows エクスプローラーから .exe ファイルを実行します)。
何か不足していますか?この動作は意図したものですか? 変更できますか?
delphi - Delphi XE2: FastMM は Win64 アプリケーションで動作しますか?
Delphi アプリケーションで FastMM を使用して、特に FullDebugMode でのメモリ リークを追跡しています。Delphi XE2 の新しいリリースでは、メモリ マネージャとして FastMM を使用できますか? FastMM は Win64 プラットフォームで動作しますか?
delphi - ASProtect を使用して保護された Delphi 7 アプリケーションで FastMM4 を動作させることができません
「既定のメモリ マネージャーによってメモリが既に割り当てられているため、FastMM4 をインストールできません」というエラーが表示されます。Delphi 7 アプリケーションに ASProtect と Eurekalog を使用しています (ただし、Eurekalog には問題はありません)。必要に応じて、最初のユニットとして FastMM4 を配置しました。
後で、ASProtect がアプリケーションを実行する前に DLL を実行できることを知りました。
*外部ユーザー コード* このバージョン以降、ASProtect は外部動的ライブラリ > 使用機能を実装しています。
これは、メイン アプリケーションの開始前に独自のコードを ASProtectで実行する場合に非常に便利です。選択した DLL へのフル パスを ASProtect に提供する必要があります。このライブラリは、保護 > ステップで ASProtect コードに追加されます。メイン アプリケーションを実行する前に実行時に ASprotect によって実行される関数は 1 つだけです。関数宣言:
Delphi: 関数 RunApplication() : ブール値; 書き出す;
関数の結果が TRUE の場合、ASProtect はメイン アプリケーションを開始します。それ以外の場合は、エラー メッセージが表示されます。警告: DLL のリソースにアクセスしたい場合は、DialogBoxIndirect または > CreateDialogBoxInderect クラス API を使用してください。他のすべての WinAPI 関数 (FindResorceA、LoadResource など) は正しく機能せず、エラー結果を返す可能性があります。
そのため、次の DLL を作成しましたが、これは役に立ちません。
ライブラリ fastmem;
「FastMM4.pas」、SysUtils、ダイアログ、クラスで FastMM4 を使用します。
{$R *.res}
showmessage('ok!'); を開始します。終わり。
その後、アプリケーションを実行すると、「既定のメモリ マネージャーによってメモリが既に割り当てられているため、FastMM4 をインストールできません」というエラーが表示される前に、「OK」メッセージ ボックスが表示されます。
この問題を解決する方法について何か考えはありますか? Delphi のデフォルトのメモリ マネージャを無効にすることはできますか? ありがとう。:)
注: ASProtect はフォーラム サポートを提供しなくなりました。
delphi - Delphi メモリの問題 (FastMM4)
ファクトリを使用してオブジェクトを構築するプロジェクトに取り組んでいます。ファクトリ関数へのポインターを vars にグローバルに保持し (悪いことはわかっています)、初期化時に登録します。
私は最近、プロジェクトにメモリ リークがあるかどうかを知りたいと思っていたので、FastMM4 をダウンロードして調べてみることにしました。修正できるいくつかのエラーが発生しましたが、少し困惑しているのは、以下のコードに示すように、ファクトリに関連するメモリを解放していないようです。小さなメモリ リークが発生しています。ばかげていませんが、それでも迷惑です。
メモリを解放するために何を使用しますか (そうである場合)、dispose(@factoryfunction) を試しましたが、すべてを台無しにしているようです。私は低レベルのポインターが苦手で、いつも混乱してしまうので、誰かがそれを助けてくれれば、それは素晴らしいことです.
以下に、私が抱えている問題を説明する頭のてっぺんから書き留めた例を含めました。
乾杯、
バリー
delphi - New および Dispose Delphi 6 を使用した Fastmm
New を使用してメモリを割り当て、Dispose を使用してメモリを解放する Delphi 6 コードがあります。コードをステップ実行したところ、New と Dispose の両方が実際に呼び出されることがわかりました。
Dispose が呼び出されたにもかかわらず、FastMM がメモリ リークを報告している理由が気になります。破棄されるアイテムが var セクションにあるという事実に関連している可能性はありますか?
FastMMからの情報です。
delphi - FastMM4のRegisterExpectedMemoryLeakにアクセスするにはどうすればよいですか?
DelphiのfastMMメモリマネージャを使用していますが、完全なデバッグモードを使用しようとすると失敗します。
コンパイル時に次のエラーが発生します。
.incファイルは、完全なデバッグdllをロードするように指示します。FastMM_FullDebugMode.dllファイルをどこにでもコピーしました。プロジェクトに何かを含めるべきだったようです。
私はおそらく本当に明白な何かを見逃しています。
Delphiのバージョンは7です。