問題タブ [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.
c++ - FastMM を C++ Builder プロジェクトに追加する方法は?
構成しようとしていますFASTMM4
がBuilder C++ 6
、従った手順は次のとおりです。
- sourceforgeから zip をダウンロードしました。
Project -> Options -> Linker
メニューの下でチェックを外し"Use Dynamic RTL"
ました。- 内容を解凍し、ファイルをテスト C++ VCL プロジェクトに
C:/tools/FASTMM
追加しました。FASTMM4.pas
- プロジェクトメニューからユニットをコンパイルし
FastMM4.hpp
、FastMM フォルダーに新しいファイルを取得するだけです。 - 私のプロジェクトにファイルを含め、上に
FastMM4BCB.cpp
も書きました。#include <FASTMM4.hpp>
- にパスを追加し
FastMM_FullDebugMode.dll
、インストール ディレクトリのフォルダーにFastMM_FullDebugMode.lib
移動FastMM_FullDebugMode.dll
しました。Bin
Builder C++
{$define FullDebugMode}
からの回線を有効にしましたFastMM4Options.inc
。
何か見逃しましたか?次のエラーが表示されるのはなぜですか?
delphi - 動的配列を解放した後のブロック フッターの破損
ユーザーがサーバーにログインし、サーバーがユーザー名/パスワードの一致結果に関連する応答を送信すると、このエラーが発生します。応答パケットを持つアレイがエラーの原因です。どうすればこれを修正できるかわかりません。このようなエラーが表示されるのは初めてです。
コード
主な方法
fOnLogin メソッド
FastMM ログ
delphi - Delphi XE2 / 64 ビットは、たとえば 1 テラバイトのメモリをターゲットにできますか?
Delphi / FastMM は OS の仕様と同じように対応できますか? http://msdn.microsoft.com/en-us/library/windows/desktop/aa366778(v=vs.85).aspx
私のソフトウェアが 1 テラバイト (Windows 2008 サーバー) にアクセスできるかどうかを顧客から尋ねられたので、疑問に思いました。
delphi - レコードへの割り当て時のメモリ リーク
新しいアプリケーションの 1 つがクラッシュする理由を突き止めようとしている間、私は Delphi のメモリ リークを追跡してきました。
私はFastMMの最新バージョンを接続し、結果に取り組んできましたが、簡潔にするために最小限の骨にまで煮詰めた次のことで混乱しています。
2 つの文字列フィールドで定義されたレコードがあります。これらは 2 つの TEdit ボックスから割り当てられ、同時にデータを TListView に書き込みます。キーコードは次のとおりです。
問題は、の値SourceTable/SourceColumn
または tp^ にあるようです。値。
TList は、終了時に適切に消去されています。割り当てをコメント アウトするtp^.SourceTable/tp^.SourceField
と、メモリ リークは発生しません。
新年だからかもしれませんが、SourceTable/SourceColumnの解放方法がわかりません...
delphi - FastMM 64 ビット「ブロック ヘッダーが壊れています」
最新の FastMM4 4.991、XE2 はメモリ リークを解決しようとしており、FullDebugMode + LogErrorsToFile 設定でこのエラーが発生しました。エラー
コードは非常にシンプルで、いくつかのプロジェクトでエラーなしで使用されました
FastMM は、 または で「メモリ不足」例外を発生させtemp := temp + format('%.2X ', [b]);
ます。コール スタックは、_UStrCat、_UStrSetLength、_ReallocMem につながります。常に. パラメータのパラメータは、41 バイトで埋められた 128 バイト長の TBytes 配列のアドレスです ( NativeUInt(@FData[0]) )。メモリ アクセス ブレークポイントを 7FFFFE62540 に配置しようとしました (FastMM メッセージ「ポインタ アドレス 7FFFFE62540 で始まる 256 バイトの現在のメモリ ダンプのアドレス」) に、アプリケーションの開始からこのメモリ ブロックをトレースしました。アドレス 7FFFFE62450 とアドレス 7FFFFE62540 は、FastMM によって ptr + f0 として埋められます ( の場合)。このブロックのコントロール サムをチェックした後、FastMM が失敗します (CPU ウィンドウでトレース)。また、このログ部分を除外しようとしましたが、シンプルで同様の例外が発生しましたformat
IntToHex
i = 27
p1
i = 27
inherited
オブジェクトの 1 つを作成します (このコードの実行後)。の下でのみ発生しFullDebugMode
ます。
最後に、同じオプションとFastMM4Options.inc
32 ビットでこのプロジェクトをビルドしてチェックしようとしTarget Platforms
ましたが、エラーはまったくありません。すべて順調。ただし、Windows 7-64 ではデバッグできません。
FastMM にコードのエラーや既知のバグはありますか? 私はそれを追跡するのに 3 日間費やしましたが、他に何をすべきかわかりません (スロットの最初の 4 GB メモリ、4 x 2048 を交換しようとさえしました)。FastMM4 の FastMM_FullDebugMode64.dll と FastMM_FullDebugMode.dll を使用しました。ありがとう。
編集:そのようなことを解決するのはひどいですが、私は自分で戦略を見つけたようです(解決、all in one
OLEまたはDirectモードに応じて異なるクラスと同じオブジェクト、異なるクラスオブジェクトとしてオブジェクトを使用することによって引き起こされるエラーの欠点でした)
1.置くエラーが発生する直前の LogAllocatedBlocksToFile(0, 0) への FastMM4 呼び出し
2. ログで最も近いオブジェクトを見つけます。私にとっては、エラー アドレスの 300 バイト下の $300 バイト近くのアドレスでオブジェクトでした
3. エラー アドレスの近くのゼロ以外の領域にデータ ブレークポイントを配置します (私にとっては) 40 バイト近く下にありました)。256 バイトのような大きな領域が変更によってトリガーされなかったため、いくつかのブレークポイント。この場合、最も近いオブジェクトの末尾 (アドレス + ログによるサイズ) とエラーのアドレスの間の領域でした。
4. ブレークポイントでコードを分析します。
5.何を追跡するかを見つけるために数回実行し、最終的にエラーコードの位置を取得しました。IDE はデータ ブレークポイントを無効にするため、実行ごとにデータ ブレークポイントを再度有効にします。