バイナリのさまざまなコンポーネントのコードサイズを推定しようとしています。ソースコードとすべてのビルドオブジェクトファイルを含むビルドディレクトリにアクセスできます。もちろん、実際に使用されるシンボルだけを含めたいので、すべてのオブジェクトファイル.text
と.data
セクションのサイズを追加すると、実際の値が過大評価されます。
ELFファイルをリンクするために使用されるすべてのシンボルのサイズとソースを確認するには?次のようなものが役に立ちます。
Symbol Size Origin
func1 0x50 ../src/func1.o
func2 0x75 ../src/func2.o
...
これはすべてのシンボルに似ています.data
。生成された.map
ファイルには次のようです。一部しかし、これらのデータは不完全なようです。目立つ2つの部分は次のとおりです。
Allocating common symbols
Common symbol size file
s_Handle 0x8 ../BUILD/src/handle.o
_main_obj 0x48 ../BUILD/src/boot.o
....
しかし、ここには数十の記号だけがリストされています。次のセクションでは、より多くの記号があるように見えますが、リンク時に「廃止予定」と表示されます。
Discarded input sections
.text 0x00000000 0x0 /home/user/.programs/gcc-arm-none-eabi-5_4-2016q3/bin/../lib/gcc/arm-none-eabi/5.4.1/armv7e-m/crti.o
.data 0x00000000 0x0 /home/user/.programs/gcc-arm-none-eabi-5_4-2016q3/bin/../lib/gcc/arm-none-eabi/5.4.1/armv7e-m/crti.o
.bss 0x00000000 0x0 /home/user/.programs/gcc-arm-none-eabi-5_4-2016q3/bin/../lib/gcc/arm-none-eabi/5.4.1/armv7e-m/crti.o
.data 0x00000000 0x0 /home/user/.programs/gcc-arm-none-eabi-5_4-2016q3/bin/../lib/gcc/arm-none-eabi/5.4.1/../../../../arm-none-eabi/lib/armv7e-m/crt0.o
.bss 0x00000000 0x0 /home/user/.programs/gcc-arm-none-eabi-5_4-2016q3/bin/../lib/gcc/arm-none-eabi/5.4.1/../../../../arm-none-eabi/lib/armv7e-m/crt0.o
.ARM.extab 0x00000000 0x0 /home/user/.programs/gcc-arm-none-eabi-5_4-2016q3/bin/../lib/gcc/arm-none-eabi/5.4.1/../../../../arm-none-eabi/lib/armv7e-m/crt0.o
.text._Z12notify_startv
0x00000000 0x14 ../BUILD/./test_env.o
.text._Z30notify_performance_coefficientPKci
0x00000000 0x18 ../BUILD/./test_env.o
.text._Z30notify_performance_coefficientPKcj
0x00000000 0x18 ../BUILD/./test_env.o
.text._Z30notify_performance_coefficientPKcd
0x00000000 0x20 ../BUILD/./test_env.o
.text._Z17notify_completionb
0x00000000 0x64 ../BUILD/./test_env.o
.text._Z21notify_completion_strbPc
0x00000000 0x30 ../BUILD/./test_env.o
...
答え1
使いたいかもしれません膨らんだマクブロットの顔:
「VM SIZE」列は、バイナリがメモリにロードされたときに占めるスペースを示します。ファイルサイズ列は、バイナリがディスクで占めるスペースを示します。 [...]デフォルト崩れるブロディにセクション別しかし、次のようにバイナリファイルを分割する他の多くの方法をサポートしています。シンボルそして市場部門。デバッグ情報でコンパイルすると、競合が発生する可能性があります。コンパイルユニットとインライン経由!
答え2
言及することはできません。注意してください。このAllocating common symbols
セクションでは、プログラムのグローバル変数名とサイズをリストします。