アームサムモード:コードサイズは減少しません
-
29-09-2019 - |
質問
みんな、ARM Cortex-A8プロセッサ用にコンパイルしたプロジェクトがあります。私はこれを行うためにGCCを利用しています。現在、実行可能ファイルのサイズは220.1 kbです。今、私は私のmakefileを変更し、フラグを追加します -mthumb
, 、MakeFileラインはこのように見えます -
gcc -mcpu=cortex-a8 -mthumb -marm -mfloat-abi=softfp -mfpu=neon
私はすべてのメイクファイルでこの変更を行い、プロジェクトを構築しますが、私が得る実行可能ファイルは最終的に220.1 kbです。
コマンドラインにもう1つ変更しました。
gcc -mcpu=cortex-a8 -mthumb -mthumb-interwork -marm -mfloat-abi=softfp -mfpu=neon
もう一度、同じサイズの実行可能ファイル220.1 kbを取得します。これをしている間、私は何かが足りませんか?
2つの数字の最小を見つけるために小さなプログラムを書き、次のコマンドラインを使用してコンパイルしました
gcc main.c -o main
8.5 kbの実行可能ファイルを入手します
次に、私はします
gcc -mthumb main.c -o main
私はまだ8.5 kbの実行可能ファイルを取得します。
ここで何が問題なのですか?
私はしました cat /proc/cpuinfo
親指が私のプロセッサによって本当にサポートされているかどうかを確認するために、それが実際にサポートされていることがわかります。私は得ます -
Processor: ARMv7 Processor rev 5 (v7l)
Features: swp half thumb fastmult vfp edsp neon vfpv3
....
....
解決
私は - 農家とは、親指のない腕を持っていることを意味します。装飾を削除してみてください。
他のヒント
実際のコードを持っていないと言うのは難しいですが、いくつかの提案があります。
- 最適化を有効にします。 (EG -O3 -Unction -Sections -FDATA -Sections)
- デバッグ情報がカウントされていないことを確認するには、実行可能ファイルをストリップします。
- ファイルサイズではなく、実際のコード(.text)サイズを確認します。たぶん、いくつかのパディングが続いているでしょう。そのためにObjdumpを使用できます。
- アセンブリコード(-Sスイッチ)をダンプし、あるケースで実際にアーム命令を生成し、別のケースで親指を生成していることを確認します。
一部のコンパイラを使用すると、ARMV7のコンパイル時にサムがデフォルトです。元の実行可能ファイルが親指に合わせて構築されていないことを確認してください。
-mno -sumbで構築してみて、コードサイズが増加するかどうかを確認してください。
所属していません StackOverflow