1

Windows 7 ライブラリを組み込みプラットフォームに移植中です。そうするために、私の雇用主は、私のシステムが移植された後に必要となるメモリの量 (および CPU ですが、今はメモリに集中させてください) を私に尋ねました。

私はインターネットを見ましたが、この質問に関する情報はあまりないようです。したがって、私の質問は次のとおりです。

  1. フラッシュ メモリ内のコードのメモリ フットプリント (データ用メモリのないコードのみ) の大まかなアイデアを得るために、使用するすべての dll のサイズを合計する必要があることをインターネットで読みました。すべてのコンパイラとプラットフォームでコード フットプリントのサイズが異なるようですが、全体的なコードのサイズ (データなし) は非常に近いことがよくあります。確認しますか?

  2. データのみ (ヒープ + スタック、コードなし) に必要なメモリを処理するために、タスク マネージャー (およびプロセス エクスプローラー) を確認しました。私が使用するデータの全体量は、「ピーク ワーキング セット」で指定されているようです。ただし、それについていくつか質問があります。

2.a. 「ワーキング セット」にはヒープ + スタック メモリが含まれますか、それともヒープのみに対応しますか?

2.b. 「ワーキング セット」にはコードのサイズも含まれていますか? (私はWindows 7を使用しているため、組み込みシステムのようにフラッシュではなくRAMにコードも保存されます)、またはデータにのみ対応していますか?

2.c. 「ピークワーキングセット」は、プログラムが開始された時点から実際にRAMにあった物理メモリの最大量を反映しているようですが、プログラムがその後に使用できるサイズを反映していません(実行時にメモリを割り当てた場合-これは悪いことです ;) - ピーク値は増加し続けます)。確認しますか?

2.d. したがって、実行時にメモリを割り当てない場合、「ピーク ワーキング セット」は、組み込みシステムが必要とする RAM の最大サイズとほぼ一致することを確認してください。システム技術の違いによる多少のサイズの違いまで...

ありがとう、

アントワーヌ。

4

1 に答える 1

1

Windows Embeddedでアプリケーションを実行する予定がない限り、Windowsでのコードとデータの使用状況を確認しても、有用なことを示すものにはなりません。

1)DLLはライブラリであり、DLL内のすべてのコードがコードで使用されるわけではありません。ほとんどの組み込みシステムは静的にリンクされており、リンカーはコードによって実際に参照されているモジュールのみをリンクします。したがって、DLLの依存関係の合計をとることは、メモリ要件の大幅な過大評価につながる可能性があります。

2)Windowsのメモリ管理は、メモリの使用に追われています。これは、一般的に、一般的なデスクトップシステムのパフォーマンスを向上させる可能性があるためです。たとえば、Windowsのスレッドスタックは通常2Mb程度ですが、それほど多く使用することはめったにありませんが、Windowsは、安全性の面で誤りを犯す可能性があるため、どのような場合でもそれを提供します。組み込みシステムのスレッドスタックは、通常、数十バイトから数十キロバイトの範囲になります。これは、アプリケーションによって異なります。

Windowsタスクマネージャーは、Windowsがプロセスに割り当てるものを表示しますが、プロセスが必要とするものとは関係がない場合があります。また、アプリケーションはWindowsサービスを使用しています。カーネルお​​よびデバイスサービスに使用されるすべてのメモリがプロセスの一部として表示されるわけではありませんが、組み込みシステムでは引き続きWindowsサービスが必要になる場合があります。

Windowsプロトタイプコードを使用して組み込みシステムの要件を評価する場合は、リンカーにマップファイルを生成させることから始めるのが最適です。これにより、静的に割り当てられたデータとコードサイズの観点からメモリ使用量の詳細な説明が提供されます。 。

コードサイズは、コンパイラのパフォーマンスだけでなく、命令セットの効率にも依存します。一部のアーキテクチャは、他のアーキテクチャよりも高いコード密度を実現します。Windowsアプリケーションのコードサイズは、実行環境が大きく異なる可能性があるため、埋め込みコードサイズの良い指標にはなりません。たとえば、32ビットARM上のプリエンプティブマルチタスクRTOSカーネルは、10Kb未満のコード、おそらく別の10のファイルシステム、10〜30Kのネットワークスタック、別の10のUSBで実装できます。デスクトップコードとは異なる世界。

データメモリの使用量は、おそらくもっと簡単に判断できます。ただし、これは、Windowsの機能を観察するのではなく、アプリケーションの分析を通じて行います。アプリケーションが直接インスタンス化するデータがあり、次に、呼び出す可能性のあるライブラリとデバイスドライバーによってインスタンス化されるデータがあります。Windowsでは、後者は比較的大きく、制御できない可能性があります。ネットワークスタック、USB、ファイルシステムなどの一般的な組み込みシステムライブラリは小さくなり、パフォーマンスとサイズの両方ではるかに決定論的です。

より良い方法は、アプリケーションをその汎用、パフォーマンス要件、リアルタイムの制約、およびハードウェア要件(ディスプレイ、ネットワーキング、I / O、マスストレージなど)の観点から説明してから、同等のソリューションを検討することです。ソリューションを実装するために必要なライブラリ。ほとんどの組み込みシステムは「ベアボード」であり、作成するかサードパーティのソリューションを使用しない限り、Windowsで見られるサービスはありません。Windowsが組み込みシステムに匹敵するソリューションになることはめったにありません。


アプリケーションではなく単なるライブラリである場合は、WindowsでホストされているGCCクロスコンパイラを使用してlikleyターゲット用にビルドし、最終的にどれだけ大きくなるかを確認します。そのためのハードウェアは必要ありませんし、お金もかかりません。

于 2012-07-13T20:54:57.460 に答える