2012-02-29 15 views
0

サンプルのC++プログラムでは、linuxのsizeコマンドを使用して次の情報を得ました。オブジェクトファイルと実行可能ファイルの間のさまざまなフィールドのサイズの差

text data  bss  dec  hex filename 
1908  304  152 2364  93c test 
346  4  1  351  15f test.o 

私は出力がサイズであることを読みました。テキストは実際のコードであり、bssは初期化されていないグローバル変数を含み、データは初期化されたセグメントと初期化されていないセグメントの両方を加えたものです。私の質問は、ソースコードがメモリ内で共通であるため、オブジェクトファイルと実行可能ファイルのサイズが異なっていることです。グローバル変数がない場合、なぜbssのサイズが表示されますか?

サンプルコードファイルが含まれているは以下の通りです:

#include <iostream> 

using namespace std; 

    int main() 
    { 
     cout << "Hello World!" << endl ; 

     return 0; 
    } 

はありがとうございました!

答えて

1

オブジェクトファイルにはコードのみが含まれているため、サイズが異なります。リンクされたファイルには、コンパイラのC++フレームワーク(つまりmainを呼び出すために必要なコード)と、さまざまな標準ライブラリ(少なくともCとC++の標準ライブラリ)へのリンクが含まれています。

+0

ありがとうございました。グローバル変数がなくてもグローバル変数のサイズを表示しているのはなぜですか?コンパイラ/リンカの挿入情報のため? – Izza

+0

はい。コードをデコンパイルして、より良いアイデアを得るようにしてください。特に、あなたは "勘違い"と "犯罪"のグローバルを持っているでしょう... –

関連する問題