раздел данных в C ++ - PullRequest
       1

раздел данных в C ++

6 голосов
/ 19 февраля 2010

У меня есть вопрос, чтобы прояснить мою путаницу с организацией памяти на компьютере в C ++.

В C ++ разные данные размещаются в разных местах.Насколько я понимаю,

1) сегмент сегмента данных, в котором находятся глобальные и статические данные;

2) раздел кучи, объекты, созданные новыми

3)секция стека, локальная переменная

4) текстовая секция, сам код.

Это правильно?Я что-то пропустил или сделал неправильно?

Спасибо!

Ответы [ 4 ]

3 голосов
/ 19 февраля 2010

Вот руководство , которое может помочь.

1 голос
/ 14 июля 2015

Я написал статью под названием « C ++ Internals :: Memory Layout », которая прояснит это для вас.

Краткий отрывок из статьи:

.text segment

Это Сегмент только для чтения , сегмент фиксированного размера.

Текстовый сегмент, или сегмент кода, содержит исполняемые инструкции, предоставляемые компилятором и ассемблером.

.data segment

Это Чтение-запись , сегмент фиксированного размера.

Сегмент данных, он же инициализировансегмент данных, содержит инициализированные:

  • глобальные переменные (включая глобальные статические переменные)
  • статические локальные переменные.

Размер сегмента зависит от размеразначения в исходном коде, значения могут быть изменены во время выполнения.

.rdata/.rodata segment

Это Только для чтения сегмент

Сегменты содержат статические безымянные данные (например, строковые константы)

.bss segment

Это Чтение-запись исмежный с сегментом .data.

Сегмент BSS, также называемый сегментом неинициализированных данных, содержит статически распределенные (глобальные и статические) переменные, представленные только нулевыми битами при запуске программы.BSS означает Block Started by Symbol, псевдооперацию, существовавшую в очень старом ассемблере, разработанном для IBM.

heap & stack

Вы совершенно правыо тех.В любом случае, если вы хотите проверить некоторые примеры и познакомиться поближе, обратитесь к упомянутой статье.

1 голос
/ 19 февраля 2010

Этот вопрос мне кое-что напоминает ... вот оно: http://www.gotw.ca/gotw/009.htm

1 голос
/ 19 февраля 2010

Обычно есть как минимум два раздела данных. Один с инициализированными глобалами, другой без (BSS). Секция стека обычно не генерируется в двоичном файле.

Конечно, подобные вопросы, связанные с реализацией, бесполезны, если не указать реализацию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...