問題タブ [code-size]
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 - void ポインターを除外することにより、コンパイル済みコードのサイズを大幅に削減する
私は最近、フラッシュ メモリが 2kB しかないマイクロコントローラ用の組み込みソフトウェアを C 言語で開発しています。プログラミングの終わりに近づいて、コードの制限に達しています。これまでは、この問題が発生した場合にコンパイラの最適化のレベルを上げて、再テストを行ってから、楽しく続けてきました。しかし、最近最適化の限界に達し、最後の機能を追加したところ、再びメモリ不足になりました。その結果、George Foreman にソース コードを公開して、無駄を省かなければなりませんでした。
私はあちこちでいくつかの抽象化の層を減らすことにいじりました。これは問題をわずかに改善しましたが、十分ではありませんでした。次に見たのは、関数プロトタイプを持っていることでした
これは、処理するイベントと、呼び出しに追加データを渡すために使用できるvoid ポインターをパラメーターとして取ります。余分なデータが必要ない場合は、合格しNULL
ました。この関数は、開発の非常に早い段階で作成されたもので、 を使用したことがないことに気付いたdata
ので、除外しました。この 1 つの変更により、必要なコンパイル済みコードのサイズを節約できました (~100バイトNULL
) process_event
。
c - オープン ソースまたはフリーウェアの C コード メトリクス ツール?
私はツールを見つけようとしてきました (できれば MAC OS X 用ですが、移行してもかまいません)。Maultechもいくつか言及しており、このページもそうですが、私はそれらを機能させることができませんでした。メーターとアカウント (そのページにリストされています) は、私が欲しかったもののほとんどをカバーしているようです。ツールも最新ではないようで、出力がまだ信頼できるかどうか確信が持てません。
無料またはオープンソースでこれを行うことができる現在のCツールはありますか? 私が見つけたもののほとんどは、Java または OO 用です。
単純なメトリックとは、たとえば、文字、空白、関数、メソッド、ステートメントの量、ネストの深さなどの量を計算することを意味します。
サイズとは、コード行とコメントを意味します。
複雑さとは、少なくとも mccabe および halstead メトリックを意味します。
Couple と Cohesion とは、関数呼び出し間の相互作用などを意味します (これは既知の SE 原則です)。
performance - GCCコンパイラを使用してコンパイルされたCプログラムのコードサイズを取得するためのメソッド/関数はありますか?(いくつかの最適化手法が適用されると異なる場合があります)
- 関数を使用してコードサイズを測定し、
fseek()
それをシェル変数に格納できますか? milepost gcc
またはを使用してコードサイズ、コンパイル時間、実行時間を抽出することは可能GNU Profiler tool
ですか?はいの場合、それらをシェル変数に格納する方法は?
私の目的は、コンパイル時間、実行時間、コードサイズに基づいて最適化手法の最適なセットを見つけることなので、これらのパラメーターを返すことができる関数を期待します。
これにより、実行時間が変数に格納されますVal
。同様に、コードサイズとコンパイル時間の値を取得したいと思います。私は、外部プログラムを使用せずに、これを達成するためにできることを好みます!
c++ - デモ作成者はどのように超小型ファイルサイズを達成していますか?
私が YouTube でデモシーンのビデオを見ると、作成者はファイルサイズが 64kb 以下で、わずか 4kb のものもあるとよく自慢します。非常に基本的なプログラムを C++ でコンパイルすると、実行可能ファイルは常に少なくとも 90kb 程度になります。これらのデモはすべてアセンブリで書かれていますか? 私の理解では、デモ作成者も c/c++ を使用していました。
atmega - ファイルのコード サイズを決定する
私はプログラムを持っていて、ここで入手できる Hex ファイルにコンパイルします。この Hex ファイルを ATMega カード 163 に焼き付けたところ、正しく動作しました。今、ファイルのコードサイズを知りたいです。
実行すると次のようになりsize main.hex
ます。
テキスト サイズと bss が 0 なのはなぜですか? データサイズの意味は何ですか?
c++ - 静的ライブラリ; 未使用の記号; ヘッダーの定義
printf
組み込みシステム用の HAL を作成していますが、その一部として( というクラスを介して) 機能を再作成していますPrinter
。組み込みシステムであるため、コードスペースが重要であり、デフォルトで浮動小数点のサポートを除外したいのprintf
ですが、HAL のユーザーがライブラリを再コンパイルすることなく、プロジェクトごとに浮動小数点を含めることができるようにします。 .
すべてのクラスのメソッド定義は、ヘッダー ファイルにインラインで含まれています。
printer.h
のように見えます....
さて、これはうまくいくはずだと私は理解しています。
printer.cpp
素晴らしくシンプルです:
不必要なコードの肥大化:
ライブラリをコンパイルし、ENABLE_PRINT_FLOAT
定義せずにプロジェクトを作成すると、コード サイズは 9,216 kB になります。
必要なコードの肥大化:
ライブラリとプロジェクトの両方を でコンパイルするとENABLE_PRINT_FLOAT
、コード サイズは 9,348 kB になります。
必要なコード blo.... ああ、それは肥大化し
ていませ ん。しかし、いいえ...代わりに、7,092 kB のコード サイズと、正しく実行されないプログラムがあります。ENABLE_PRINT_FLOAT
最小サイズ:
両方をコンパイルせずにコンパイルするENABLE_PRINT_FLOAT
と、コード サイズはわずか 6,960 kB になります。
コードサイズを小さくし、クラスを柔軟にし、使いやすくするという目標を達成するにはどうすればよいですか?
ビルドシステムはCMakeです。完全なプロジェクト ソースはこちらです。
メインファイルは素晴らしくシンプルです: