2

FastMM4 を使用する D2006 アプリがあります (たとえば、DPR ファイルの uses 句の先頭に「FastMM4」が含まれています)。とにかく、Delphi がメモリ マネージャーとして FastMM4 を使用していることは知っていますが、ダウンロードしたバージョンには、より多くのデバッグ ダンプ オプションがあります。

最近、Windows XP が組み込まれたシングルボード タブレット タイプの産業用 PC でアプリを実行しようとしました。プロセッサーは非インテル「Vortex」チップです。アプリは起動時にメモリ エラーで失敗し、メモリが解放された後にメモリへのアクセスに関する FastMM4 からの苦情で終了します。

ソース コードから FastMM4 の痕跡をすべて削除すると、問題が解決するようです。アプリは問題なく動作します。

私の質問。この問題を引き起こす FastMM4 のダウンロード バージョンについては何ですか? ASM コードの使用に関連していると思われる FastMM4 および Intel 以外のプロセッサでのクラッシュに関する逸話を見てきました。FastMM4 には、非 ASM コードの生成を強制するディレクティブが含まれていますが、それでは問題は解決しません。

FastMM4 の統合された D2006 バージョンにまだ問題が存在する可能性があることを少し心配していますが、まだ確認していません。

4

2 に答える 2

2

答えは、何もありません。

Windows XP Embedded は、一部のコンポーネントを除いた単なる Windows XP であり、それ以上のものはありません。存在するこれらのコンポーネントは、通常の XP のものと同じです (バイナリ同等、偶数)。基本的に、XPEXP であり、一部の DLL が削除され、一部のレジストリ エントリが存在しません (ここで単純化しすぎていることはわかっています)。

したがって、アプリに生じる唯一の違いは、一部のライブラリが欠落している可能性があり、一部のコンポーネントが適切にインストールされていない可能性があることです。私が知る限り、FastMM はコアの Win32 API を除いて特別なコンポーネントに依存していません。コア Win32 API は非常に明確に存在します。

したがって、問題は FastMM4 ではなく、別のものにあります。ほとんどの場合、不足しているライブラリの処理が不適切です。おそらく、コードの一部で DLL が動的にロードされますが、実際にロードされているかどうかの検証に失敗するか、レジストリから設定を読み取って欠落データの処理に失敗します。これはメモリの破損につながります。運が良ければ、一方のメモリ マネージャを使用すると明らかになりますが、もう一方のメモリ マネージャでは発生しません。

于 2010-08-26T16:54:44.590 に答える
1

ルール1:他の人を非難する前に、まずコードを非難します

コードのバグを見つけるための記事デバッグモードでのメモリマネージャの使用とDelphiでのメモリの問題

于 2010-08-27T11:52:48.243 に答える