あなたの習慣について教えてください!!

こんばんは。
表題の通り、セクション領域に関して3点ほどご質問が御座います。

(1)グローバル変数は、
 ・0でない初期化を行う→.dataセクション
 ・0で初期化、または、初期化なし→.bssセクション
 上記のようにメモリに配置されると思いますが、
 上記をstatic宣言した場合でも結果は同じでしょうか?
 (static宣言したグローバル変数)

(2)スタック、ヒープそれぞれが属するセクションは、それぞれ専用の
 スタックセクション、ヒープセクションという名のセクションがあるという認識であっていますでしょうか?
 (.dataでもなく、.bssでもなく、.textでもなく、.rodataでもなく。。。)

(3)プログラム中に宣言した変数名や、そのアドレスを使用して、属しているセクションを確認することが出来る方法はありますでしょうか?

どうかご教授をお願い致します。

A 回答 (3件)

> (1)グローバル変数は、


> 上記をstatic宣言した場合でも結果は同じでしょうか?
> (static宣言したグローバル変数)

静的グローバル変数はシンボルの公開が抑止されるのみでその他に違いはない場合が多いかと。


> (2)スタック、ヒープそれぞれが属するセクションは、それぞれ専用の
> スタックセクション、ヒープセクションという名のセクションがあるという認識であっていますでしょうか?

ありません。


> (3)プログラム中に宣言した変数名や、そのアドレスを使用して、属しているセクションを確認することが出来る方法はありますでしょうか?

通常、各アドレスはまとまっている(例えば1000-2999はtextで3000-3999はbss,4000-5999はdataの様に)のでアドレスを調べれば解ります。
実行ファイルの形式上情報がありますので実行ファイルを解析すれば各セクションの位置や大きさはわかります。(詳しく知りたい場合にはunix系のsizeコマンドのソースを参照するのも良いかと)
elf形式やaout形式にマニュアルページやヘッダなども知る上で良い資料となりそうに思います。
※javaやC++には固有のセクションが追加されている場合があったり。


> (3)プログラム中に宣言した変数名や、そのアドレスを使用して、属しているセクションを確認することが出来る方法はありますでしょうか?

通常、アドレスを調べれば解ります。

予約された領域を除き残った領域を下位アドレスからヒープとして、上位アドレスからスタックとして動的割り当てしたりするのではないかな。
    • good
    • 0
この回答へのお礼

ご回答有難う御座いました。

お礼日時:2011/04/20 19:43

「一般的」ってどういうこと?



この辺は規格では一切触れられていない話であり, 処理系ごとに違ってよいということは十分理解していて当然ですよね.
    • good
    • 0

何か特定の処理系を想定しているように見えるので, その処理系でやってみればわかるんじゃないの?

    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
>何か特定の処理系を想定しているように見えるので,
 →いえ、こちらはあくまで一般的な事例をご教授いただけたらと思っています。

>その処理系でやってみればわかるんじゃないの?
 →質問(3)の通り確認の仕方が不明です。

お礼日時:2011/04/19 20:19

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報