Хелпикс

Главная

Контакты

Случайная статья





Динамическая память



Динамическая память

Память в C++ разделена на 2 части:

Стек: Все локальные переменные

Куча: Неиспользованная память, которая может быть использована, когда программа динамически выделяет память

 

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

 

 

   new int;

 

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

 

 

   int *p = new int;   *p = 5;   // У нас есть динамически выделенная память для целых чисел, а затем ей  присвоено значение 5

 

При этом, указать p хранится в стеке, а значение 5 вы куче.

 

 

Для локальных переменных в стеке управление осуществляется автоматически. В куче, необходимо вручную управлять памятью и удалять её оператором delete, когда она не требуется.

 

 

   delete p;

 

 

Это выражение удаляет память, на которую указывает ponter

 

               int *p = new int; // Объявляем указатель на новую переменную    *p = 5;           // Присваиваем указателю значение 5    cout << *p << endl; // Используем указатель (пример)    delete p;         // Освобождаем память (удаляем указатель)

 


Если не освобождать выделенную с помощью new память, то образуется утечка памяти, потому что та память остается выделенной, пока программа не будет закрыта.

 

 

Оператор delete освобождает память, выделенную для переменной, но сам указательне удаляет. Указатели, которые указывают на несуществующую область памяти, называютсявисячими указателями


   int
*p = new int(5); // Объявляем указатель, указывающий на динамическую переменную со значением 5   delete p;    // Освобождаем память. Теперь p - висячий указатель   p = new int; // Заново используем для нового адреса

 

Указатель NULL – это константа, со значением равным нулю. Присваивание NULL указателю при его объявлении – хорошая идея, если у вас нет точного адреса присваивания. Указатель, к которому присвоен указатель NULL – пустой указатель.

  int *p = NULL; // Пустой указатель   p = new int[20]; // Выделяем память   delete [] p;   // Удаляем массив, на который указывает p

 

 

sizeof

sizeof – оператор, с помощью которого можно узнать размер переменной/массива в байтах


   int a=51661;   long b=24556671;   cout << "\n" << sizeof(a) << "\n"; // Выводит 4   cout << "\n" << sizeof(b) << "\n"; // Выводит 8

 

Категория Тип Размер
логический bool 1 байт
символьный char 1 байт
целый short 2 байта
  int 2/4 байта
  long 4 байта
  long long 8 байт
С плавающей точкой float 4 байта
  double 8 байт
  long double >8 байт

 

 

https://tohtml.com/cpp/



  

© helpiks.su При использовании или копировании материалов прямая ссылка на сайт обязательна.