2010-03-17 2 views
3

В C++, где хранятся статические, динамические и локальные переменные? Как насчет в C и Java?В C++, где хранятся статические, динамические и локальные переменные? Как насчет в C и Java?

+0

А как насчет LISP, FORTRAN и Haskell? Ох, а как насчет PHP и Perl? – 2010-03-17 20:14:52

+0

Вы забыли мозговой шок и пробелы ... – Macmade

+1

'static' означает похожие, но тонко разные вещи на этих языках. 'local 'и' dynamic' не являются ортогональными понятиями. Поэтому трудно точно ответить на этот вопрос, не зная, сколько вы уже знаете о предмете. Возможно, если вы более четко объясните, что вы хотите знать, вы можете получить лучший ответ. –

ответ

8

Если вы компиляции C/C++ для создания окна исполняемым (или, может быть, для любой системы x86), то статические и глобальные переменные, как правило, хранятся в сегменте памяти называется данных сегмент. Эта память обычно также разделяется на переменные, которые инициализируются, и те, которые не были инициализированы программой в их определении.

Локальные переменные, которые определены внутри функций, выделяются в запущенном стеке программы вместе с адресом возврата функции.

Под «динамическим» Я предполагаю, что вы имеете в виду вещи, выделенные с использованием new или malloc. Они обычно хранятся в еще одной области памяти, называемой «кучей» (которая не имеет ничего общего с структурой данных «кучи»).

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

+5

+1 (за исключением программиста, о котором вы должны знать) – codenheim

+0

объясните пожалуйста. – shoosh

+3

Конечно. Скорее всего, любой программист C/C++, заслуживающий внимания, знает, где хранятся их переменные. Он поставляется с территорией. Для управляемых языков можно утверждать иначе, но не для C/C++. – codenheim

2

C, C++

  • Static: сегмент данных из модуля/DLL/разделяемой библиотеки код компилируется в.
  • Динамический: на любой куче памяти, такой как куча времени выполнения, куча Win32, пользовательские кучи. Какая куча данных заканчивается, зависит от того, как вы распределяете память (и для C++, если оператор new/delete переопределен для использования определенного распределителя).
  • Локальный: на фрейме стека для текущей функции/метода.

Java

  • Статическая: На JVM кучи.
  • Динамический: на куче JVM.
  • Локальный: на фрейме стека для текущей функции/метода.
Смежные вопросы