0

私は ATmega128 用に C でコードを書きました。

コードで行った変更がプログラム メモリにどのように影響するかを知りたいです。

より具体的には、コードが次のようなものであると考えてみましょう。

   d=fun1(a,b);
   c=fun2(c,d);

コードで行う変更は、同じ関数をより多く呼び出すことです。

   d=fun1(a,b);
   c=fun2(c,d);
   h=fun1(k,l);
   n=fun2(p,m);
   etc...

AtmelStudio 6.1 でソリューションをビルドすると、プログラム メモリに変更が見られます。

ソリューションを構築せずに、コードの変更がプログラムメモリにどのように影響するかを予測する方法はありますか?

ありがとう!!

4

1 に答える 1

0

一般的に言えば、C/C++ を使用してこれを行うことはほぼ不可能です (つまり、努力が報われないということです)。

単純なケース (呼び出しの数が増える) では、各呼び出しの命令の数を決定し、その数を掛けることができます。これは、コンパイラがすべてのケースでインライン化するわけではなく、より高いレベルで最適化を適用しない場合にのみ正しくなります。

新しいバージョンにアップグレードすると、これらの計算が間違っている可能性がありますgcc

したがって、通常、2 つのビルド (同じコンパイラ バージョン、同じ最適化) を比較すると、正確な数値しか得られません。たとえば、関数をサイズで比較するなど、すべての情報を提供しますavr-sizeavr-nmこのタスクは (出力を .csv ファイルに変換することによって) 自動化し、スプレッドシートを使用するかdiff、変更を探すことができます。

この方法は通常、プログラムをより小さなデバイスに詰め込む必要がある場合にのみ有効です (たとえば、4k フラッシュから 2k に - すでに 128k フラッシュがあり、かなり多い)。

このプロセスは苛立たしいものです。なぜなら、C で同じデザイン パターンをわずかな違いで適用すると、サイズが異なる可能性があるからです。したがって、C/C++ からは、何が起こるかを実際に予測することはできません。

于 2013-06-27T14:26:45.130 に答える