Размещение данных в памяти, стек, куча, указатели С++

Указатели

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

примитивные типы данных имеют определенный размер памяти, разнящийся лишь от варианта платформы.
Узнать его можно используя функцию sizeof ().
Структуры и классы, о которых мы поговорим в других уроках, занимают памяти ровно столько, сколько все типы данных, входящие в их поля.

Структура памяти

структура любой компилируемой программы такова, что состоит из=

  1. стека
  2. и остальной памяти, называемой кучей.

Стек

Стек – это специальная структура данных, предназначенная для быстрого доступа к данным. Эту структуру еще часто называют LIFO (Last In First Out)– последним пришел, первым ушел. Стек представляет собой, как бы обойму, в которую вместо патрона загоняется очередная переменная.
В силу своей природы стековая память работает гораздо быстрее, чем обычная.
Стек многим хорош, но вот у него есть маленькая проблема – ограниченный объем памяти. Примитивные типы данных занимают мало памяти и поэтому помещение их в стек является логически правильным решением, ускоряющим работу программы.

Однако в C++, равно как и в других компилируемых языках, существуют громоздкие типы данных типа =

  • массивов,
  • структур
  • и классов.

Переменные этих типов могут занимать обширные области памяти, что может привести к переполнению стека и экстренному прекращению работы вашей программы.
Это очень неприятный момент в кодировании. Чтобы избежать подобной участи, была придумана концепция размещения таких громоздких типов данных в свободной области памяти, именуемой кучей.

Куча

Ку?ча (англ. heap) в информатике и программировании — название структуры данных, с помощью которой реализована динамически распределяемая память приложения, а также объём памяти, зарезервированный под эту структуру.

Фактически, куча – это вся ваша оперативная память. Гигабайт или 4 Гигабайта – роли не играет. Все это будет кучей
Что дает куча? Практически огромный размер памяти, способный вместить в себя даже самый большой тип данных.

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

При размещении объекта реализация примитива «создать объект» просматривает доступную куче свободную память в поисках возможности разместить в ней объект требуемого размера. Многие реализации примитивов кучи могут в случае нехватки собственной свободной памяти запросить дополнительную память у операционной системы. В случае, если по тем или иным причинам разместить объект невозможно, примитив «создать объект» сообщает об ошибке

источник = http://www.programbeginner.ru/?cat=1