私は64ビットのubuntuを使っていますが、私は以下のように様々な変数のためのbssのサイズを探しています。なぜ初期化されていないグローバル変数を追加してもsizeコマンドで表示されるbss値が増加しないのですか?
最初のプログラム:
#include <stdio.h>
main()
{
}
サイズコマンドは、上記のプログラムによって生成された実行のために結果の下に与えています。
text data bss dec hex filename
1115 552 8 1675 68b a.out
第2のプログラム:
#include <stdio.h>
int a = 10;
main()
{
}
サイズコマンドは、上記のプログラムによって生成された実行のために結果の下に与えています。
text data bss dec hex filename
1115 556 4 1675 68b a.out
第3のプログラム:
#include <stdio.h>
int a;
main()
{
}
サイズコマンドは、上記のプログラムによって生成された実行のために結果の下に与えています。
text data bss dec hex filename
1115 552 8 1675 68b a.out
注:
コンパイル中に、私はどのフラグを使用していません。
下記の質問にお答えください。
1) Why bss is 8 bytes for first program even though there are no uninitialized global or static variables?
2) Why bss is reduced to 4 bytes when I added initialized global variable in second program?
3) Why bss is showing 8 bytes for the third program?
4) What are dec and hex in the output given by size command?
あなたのプログラムは何もしていないので、この変数はおそらく最適化されています。 –
さまざまなセグメントのサイズがソースコードだけで完全に決定されているかのように質問します。実際、コンパイラと(特に)リンカはこの分野で大きな寛容さを持っています。 –
どのコンパイラフラグを使用しましたか?そして、 'objdump -x a.out'は何を言いますか? – rustyx