Размещение данных в памяти, стек, куча, указатели С++
Primary tabs
Указатели
указатель всего лишь указывает на область памяти, в которой хранится переменная. Это свойство указателя очень полезно, но есть еще одно, гораздо чаще применяемое в программировании. Указатель позволяет осуществить динамическое выделение памяти.
примитивные типы данных имеют определенный размер памяти, разнящийся лишь от варианта платформы.
Узнать его можно используя функцию sizeof ().
Структуры и классы, о которых мы поговорим в других уроках, занимают памяти ровно столько, сколько все типы данных, входящие в их поля.
Структура памяти
структура любой компилируемой программы такова, что состоит из=
- стека
- и остальной памяти, называемой кучей.
Стек
Стек – это специальная структура данных, предназначенная для быстрого доступа к данным. Эту структуру еще часто называют LIFO (Last In First Out)– последним пришел, первым ушел. Стек представляет собой, как бы обойму, в которую вместо патрона загоняется очередная переменная.
В силу своей природы стековая память работает гораздо быстрее, чем обычная.
Стек многим хорош, но вот у него есть маленькая проблема – ограниченный объем памяти. Примитивные типы данных занимают мало памяти и поэтому помещение их в стек является логически правильным решением, ускоряющим работу программы.
Однако в C++, равно как и в других компилируемых языках, существуют громоздкие типы данных типа =
- массивов,
- структур
- и классов.
Переменные этих типов могут занимать обширные области памяти, что может привести к переполнению стека и экстренному прекращению работы вашей программы.
Это очень неприятный момент в кодировании. Чтобы избежать подобной участи, была придумана концепция размещения таких громоздких типов данных в свободной области памяти, именуемой кучей.
Куча
Ку?ча (англ. heap) в информатике и программировании — название структуры данных, с помощью которой реализована динамически распределяемая память приложения, а также объём памяти, зарезервированный под эту структуру.
Фактически, куча – это вся ваша оперативная память. Гигабайт или 4 Гигабайта – роли не играет. Все это будет кучей
Что дает куча? Практически огромный размер памяти, способный вместить в себя даже самый большой тип данных.
Для размещения и удаления динамических объектов используются примитивы «создать объект» (например, malloc , new) и «удалить объект» . Кроме того, перед началом работы программы выполняется инициализация кучи, в ходе которой вся изначально выделенная под кучу память отмечается как свободная.
При размещении объекта реализация примитива «создать объект» просматривает доступную куче свободную память в поисках возможности разместить в ней объект требуемого размера. Многие реализации примитивов кучи могут в случае нехватки собственной свободной памяти запросить дополнительную память у операционной системы. В случае, если по тем или иным причинам разместить объект невозможно, примитив «создать объект» сообщает об ошибке
источник = http://www.programbeginner.ru/?cat=1
- Log in to post comments
- 23474 reads