3

小さな実行可能ファイルに対する Mac OS X 10.5 の「size」コマンドの次の出力を考えると、__DATA の下の値は何ですか? 初期化されていないデータ セグメントのサイズですか、それとも初期化されたデータ セグメントのサイズですか? 私が混乱しているのは、この値(および残りの値)が、プログラムで(唯一の)グローバル配列を初期化するかどうかに関係なく変更されないように見えることです。

Linux と Mac では、このコマンドの動作が異なると思いますか?

__TEXT  __DATA  __OBJC  others  dec hex
4096    4096    0   4294971392  4294979584  100003000
4

2 に答える 2

1

すべてのスタティックとグローバルは初期化されます。ゼロに初期化されるのか、それとも他の値に初期化されるのかが問題になります。ゼロに初期化された変数は、__DATAセグメントの__bssセクションに入ります。他の変数は、__DATAセグメントの他のセクションに入ります。

于 2012-04-25T14:11:52.123 に答える
1

Linux では、形式は次のとおりです。

   text    data     bss     dec     hex filename
   1281     520      32    1833     729 a.out

BSSゼロ初期化されたグローバルおよびローカル静的のバイト単位のサイズです。私が確認したところ、それら(データ、bssなど)は、変数の数とその初期化された値の変更に応じて適切に変化しています。

注意すべきことの 1 つは、CWD でsize自動的に選択されるパラメーターがないことです。a.out

私はMacのことをまったく知りません。私の推測は__OBJC=BSSです。sizeコマンドの呼び出し方法も確認してください

于 2012-04-25T12:48:30.773 に答える