1

プロジェクトをコンパイルしているときに、du および size コマンドの出力が合計されないことに気付きました。

> du -sh X.o
490K X.o

> size X.o
  text    data     bss     dec     hex filename
  2128       0      12    2140     85c X.o

オブジェクト ファイルが使用するディスク容量が、ファイルのテキスト データと bss セグメントの合計と異なるのはなぜですか? ここで何が欠けていますか?

4

2 に答える 2

0

このsizeコマンドは、実行中にコードとデータが占める量を示します。オブジェクトファイルは、もちろんそれ以上のもので構成されています。

それは、ファイル形式自体のオーバーヘッドから始まります。これには、少なくともsize各部分がメモリ内でどのくらいの大きさになるかを調べるために使用する情報が含まれている必要があります。次に、シンボル テーブル、デバッグ情報、および誰が何を知っているか (コンパイラとオブジェクト ファイルの形式によって異なります) があります。

より包括的な情報を取得できますobjdump -h(またはobjdump -x、再配置レコードがいくつあるかを確認するため)。これはまだオーバーヘッドをカバーしていませんが、実際のコンテンツの量を示しています。

于 2013-11-10T13:10:13.760 に答える
0

duファイルシステム Vs に存在するファイルのサイズを表示します。sizeこれは実際のサイズ (バイト単位) です。

巨大なサイズを持つ理由の背後にある理由du- ファイルシステムは通常、ファイルがこれらのブロックに収まらないブロックで構成されており、まさにこの違いを引き起こしています。たとえば、ファイル サイズが 4096 バイトの場合は 4096 と同様にsize表示されますduが、ファイル サイズが 5000 バイトの場合は 5000 バイトとsize表示さduれますが 8192 と表示されます。

これはスラック スペースと呼ばれます。

注: 上記は、4096 バイト単位のファイル システム割り当てを想定しています。

于 2013-11-10T13:16:41.223 に答える