2012-01-20 12 views
0

bssセグメントに初期値として0が与えられる初期化されていない変数が含まれていることは知っていますが、なぜデータセグメントを格納するだけではないのですか?bssセグメントのユーティリティは何ですか?

osローダーはmemsetを呼び出すことでこれらの変数を一度に初期化するため、実行速度が速いことを読んでいますが、ローダーがmemsetを呼び出してデータセグメント内で初期化することもできます。

+0

データセグメントのどの部分に初期化が必要なデータが含まれているかをローダーはどのように知っていますか?しばしば、そのメモリのクリアを行うローダではなく、アプリケーションとリンクされ、 'main'(CランタイムまたはCRTと呼ばれる)の呼び出しの前に実行されるルーチンです。 –

答えて

2

大量の初期化されていない値がある可能性があります。あなたは、その目的のためにデータセクションを使用する場合は、バイナリを0で埋めなければなりません(あるいはその値はの何かでなければなりません)。実行可能ファイルに1メガバイトのゼロを追加するとしたら...

+0

ショートバージョン:実行ファイルのスペースを節約します。 – ams

+0

私はコンパイラが実行可能ファイル内でそれらをグループ化すべき理由を理解していますが、なぜosローダーがそれらをメモリ内の分離されたロジックセグメントに格納するのですか? –

+0

@Pindexis私は従いません。確かにロードすると、2つのセグメントを簡単にマージすることはできません。自然にそれらを2つの異なる場所にロードします。とにかく大したことではありません。 –

関連する問題