2011-02-08 3 views
1

Можно создать дубликат:
Stack,Static and Heap in C++выделения памяти в C++

Привет, ребята,

я в настоящее время готовится к интервью, и довольно часто я вижу такие вопросы, как, где " статические "переменные или где хранятся« локальные »/« глобальные »переменные и im полностью озадачены.

Мне известно о двух типах памяти: стек и куча. Кроме этого, существуют ли какие-либо другие типы памяти, где хранятся различные типы переменных. В нескольких местах я даже что-то читал о «сегменте данных», но я не уверен, как эти вещи сопоставляются друг с другом. Может ли кто-нибудь предоставить мне какие-либо ссылки/объяснения для разных типов памяти и где хранятся все различные типы переменных, предпочтительно связанные с C++.

Спасибо, Chander

+2

Стек и куча не две _kinds_ памяти. Они просто разные организации. Кроме того, Википедия хороша для изучения такого рода вещей, хотя было бы лучше получить книгу на C++, чтобы сохранить знания (написав программу, использующую статические переменные и динамическое распределение памяти). – aqua

+3

См. Принятый ответ на этот вопрос: [Stack, Static and Heap in C++] (http://stackoverflow.com/questions/408670/stack-static-and-heap-in-c) –

ответ

3

Для упрощения только немного, в основном существуют три основные области хранения вы должны быть связаны с:

  1. Global данных - один статический ячейки памяти за пределами стек или кучу. Это переменные, объявленные не локальными для любой функции. (Различие, проявляемое ключевым словом «статическое» C/C++, действительно состоит в том, какие части программы знают об имени глобальной переменной.)

  2. Данные стека - динамические, но подталкивающие и всплывающие функции звонки.

  3. Данные кучи - материал, возвращаемый новым/malloc, по-настоящему динамический, и память сохраняется до удаления/освобождения, а не при выходе из функции.

+0

Существует также программные данные, такие как как строковые литералы, в некоторых операционных системах, как они хранятся, может быть довольно сложным. –

+0

Также есть текстовая секция памяти, в которой указатели на функцию кода указывают на эту область. –

+0

Отличный, чистый ответ. Сэм, он упомянул, что его ответ касается областей хранения, которыми должен заниматься человек.Я сомневаюсь, что большинство людей должны знать о текстовой части памяти. –

0

Существует третий вид хранилища, который называется статическим. По сути, это хранилище для элементов данных в образ памяти памяти времени выполнения. Он не может быть выделен или выпущен, и его продолжительность жизни по существу такова в программе. В C++ статические переменные класса хранятся в этой области, как и глобальные.

В старые времена некоторые архитектуры процессоров (в частности, x86) использовали сегментированную адресацию. В этом случае статические данные будут находиться в сегменте данных. Чтобы получить доступ к статическим данным, вы использовали адрес относительно базы сегментов, который был в регистре DS или ES. Однако, по крайней мере, с середины 1990-х годов архитектуры ОС перешли к модели с плоской памятью, где все сегменты коалиции и покрывают всю память. Поэтому сегменты данных не должны возникать в любом текущем интервью.

Смежные вопросы