2016-07-04 7 views
3

arm-none-eabi-gccを使用してコンパイルされた組み込みアプリケーションがあり、大きなRAMの使用に問題がありました。メモリ使用状況の検査

使用するarm-none-eabi-nmいくつかのオブジェクトにいくつのメモリ割り当てがあるか調べることができます。しかし、このオブジェクトがクラスの実装である場合、クラスの各メンバを使用するメモリの数がわかりません。それを知る方法?

多くのクラスメンバーがあり、組み込みアプリケーション用のコンソールがないため、メンバーごとにsizeof()を呼び出すのはむしろ難しいです。

+0

リンカーから拡張リストを分析することができます(静的使用法を使用)。 uPで最もよく知られている誤解は、定数(特定の方法で宣言されている場合)がフラッシュからRAMにコピーされることです。 –

+0

私には分かりません。あなたはあなたの質問[tag:C++]にタグを付けましたが、あなたは[tag:gcc]について話していますので、それらの "クラス実装"の例を投稿し、それらのメンバーがどのように割り当てられているかを明確にすることができますか? – LPs

+0

クラスXのサイズ{char * buf; }は、実行時にRAMの使用にほとんど影響しません。難しいのは、コードなしの一般的なことです。 –

答えて

0

リンカ生成メモリマップファイルを確認してください。主に「.map拡張子」になります。

多くのIDEではデフォルトで無効になっており、このリンカーによってこのファイルが生成されないため、プロジェクト設定からこのファイルを有効にする必要があります。

+1

.mapファイルが見つかったと仮定すると、それはどうしますか? Isはオブジェクトのリストとそのサイズを持つ単なるテキストファイルですか? – nwp

+1

通常、マップファイルは、すべての単一のもの(コード、データ、クラス、変数)に割り当てられたメモリに関するすべての詳細(サイズ、名前、場所、セクション)を提供します。 –

関連する問題