0

私のプログラムは、実行の特定の時点で、ヒープまで(およびヒープを含めて)自身の/ proc / self/mapsを1行ずつ読み取ります。プログラムのパスは「/home/t4」です。出力は次のとおりです。

00400000-00403000 r-xp 00000000 68:06 21629911 /home/t4
00602000-00603000 r--p 00002000 68:06 21629911 /home/t4
00603000-00604000 rw-p 00003000 68:06 21629911 /home/t4
00604000-00608000 rw-p 00000000 00:00 0
01905000-01926000 rw-p 00000000 00:00 0 [heap]

コード、定数、静的変数、ヒープの4つのセグメントのみを期待していました。しかし、ここには5つあります。最初のものは明らかにコードでなければならず、最後はヒープです。おそらく2つ目は定数ですが、他の2つは何ですか?ありがとう!

4

2 に答える 2

2

初期化された静的変数の後には、初期化されていない静的変数 (.BSS) が続きます。これは、バイナリに格納する必要はありません。

于 2010-11-23T20:31:10.697 に答える
1

1 つ目は実行可能部分自体 (x ビットのため)、2 つ目は可能性が高く.rodata(w ビットがないため)、3 つ目はその他すべて (.bssおよび.data) です。mmap4 番目は、を使用した呼び出しの結果ですMAP_ANONYMOUS。(3) は(2) ではなく (2)mallocを使用して実装できることに注意してください。そこにあるオブジェクトは、従来の sbrk-heap (およびそれだけ) であり、mmap を使用して取得したプライベートな書き込み可能領域はカバーしません。従来のスタックは としてリストされますが、サブスレッドのスタックは任意のメモリ領域を使用してスタックを格納できます。通常は malloc されたものであるため、複数の も表示されません...mmapsbrk[heap][stack][stack]

混乱完了?:-)

于 2010-11-23T22:09:11.627 に答える