コンピュータシステム:プログラマの観点からは、ELF再配置可能オブジェクトファイルの2つの部分を紹介します。
。データグローバルおよび静的C変数が初期化されました。ローカルC変数は実行時にスタックに保持され、.dataセクションまたは.bssセクションには表示されません。
.bss初期化されていないグローバルおよび静的C変数、およびゼロで初期化されたグローバルまたは静的変数。このセクションはオブジェクトファイル内の実際のスペースを占有せず、単にプレースホルダです。オブジェクトファイル形式は、空間効率のために初期化された変数と初期化されていない変数とを区別します。初期化されていない変数は、オブジェクトファイルの物理ディスク領域を占有する必要はありません。実行時に、これらの変数は初期値0としてメモリに割り当てられます。
引用文中の「初期化済み」および「単位化済み」という言葉は、明示的または暗示的を意味しますか?
グローバル変数または静的C変数が明示的に初期化されていないが暗黙的に初期化されている場合、その変数は.dataまたは.bssセクションにありますか?
グローバル変数または静的C変数が暗黙的にゼロまたはゼロ以外の値に初期化されるかどうかは重要ですか?
.dataと.bssの要件は相互に排他的ではありません。 「グローバルおよび静的C変数の初期化」の.data要件は、その変数をゼロ以外の値に初期化する必要があることを示していません。もしそうなら、グローバル変数または静的C変数が0に初期化されたら、.dataセクションまたは.bssセクションにある必要がありますか?
ありがとうございます。
答え1
引用文中の「初期化済み」および「単位化済み」という言葉は、明示的または暗示的を意味しますか?
「初期化済み」とは、変数がコード宣言の横に明示的な値(ゼロかもしれません)が割り当てられていることを意味します。 「初期化されていません」とは、変数が宣言されたときに明示的に初期化されていないことを意味します。
グローバル変数または静的C変数が明示的に初期化されていないが暗黙的に初期化されている場合、その変数は.dataまたは.bssセクションにありますか?
あなたの見積もりに基づいて:
.bss初期化されていないグローバルおよび静的C変数
次:
グローバル変数または静的C変数が暗黙的にゼロまたはゼロ以外の値に初期化されるかどうかは重要ですか?
初期化されていないグローバル変数のデフォルト値は 0 です。
もしそうなら、グローバル変数または静的C変数が0に初期化されたら、.dataセクションまたは.bssセクションにある必要がありますか?
あなたの見積もりに基づいて:
.bss初期化されていないグローバルおよび静的C変数、およびゼロで初期化されたグローバルまたは静的変数。
これらのどれも該当しません。必要特に、初期化されていないデータセグメントは、Cから0に対応する値でプラットフォーム上で初期化されると仮定します。 ;これは、ELFを使用するシステムでは一般的ですが、Cではすべてゼロ以外のビットパターンを使用してゼロを表すことができます。
.bss
しかし、実際には、明示的または非明示的にゼロに初期化されるグローバル変数または静的変数は、ELFバイナリの一部です。