freeCodeCamp/guide/russian/cplusplus/dynamic-memory-allocation/index.md

40 lines
4.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

---
title: Dynamic Memory Allocation
localeTitle: Динамическое распределение памяти
---
## Распределение динамической памяти в C ++
### Что такое динамическое распределение памяти на C ++?
* **Распределение памяти** в C ++ относится к памяти, выделенной для переменных, которые вы используете в своей программе.
* **Динамическое распределение памяти** - это память, которая привязана к переменным во время выполнения, и объем требуемой памяти также определяется во время выполнения.
* Эта память исходит из **кучи** , тогда как естатические_ переменные и окальные_ переменные получают память из **стека** .
* В C ++ программист может выполнять выделение памяти вручную и называется распределением **_динамической памяти_** .
* В C можно было выполнять динамическое распределение памяти, используя функции _calloc_ и _malloc_ для выделения памяти и использования _свободной_ функции для де-распределения динамической памяти.
* В C ++ в дополнение к выше, есть две функции: овые_ и _удаленные_ для выполнения динамического распределения памяти и де-распределения.
### Оператор NEW
* `new` оператор может предоставить память программиста из кучи (если доступно). Если память, запрошенная программистом, доступна, то `new` оператор инициализирует память, а затем возвращает адрес (ссылку) выделенной памяти.
* **Синтаксис**
`pointer-variable-type` = **новый** `data-type;`
Пример 1: `int *ptr` = **new** `int;`
Пример 2: `int *ptr2` = **новый** `int[10];`
Здесь `pointer-variable-type` является **указателем** типа `data type` . Тип `data-type` может быть int, char и т. Д. Или определяемым пользователем типом данных.
### Оператор DELETE
* Ответственность программиста заключается в том, чтобы де-распределить динамически выделенную память, иначе память не будет доступна для перераспределения до конца программы.
* Чтобы освободить память, оператор `delete` доступен и может быть использован программистом.
* **Синтаксис**
**удалить** `pointer-type-variable;`
Например, чтобы освободить память, выделенную в примере 1 выше, мы вводим:
`delete ptr;`
Аналогично, например, память может быть освобождена:
`delete ptr2` ;
### Утечки памяти
Утечки вызывают, когда вы не можете освободить динамическую память, которую вы выделили с помощью оператора `New` в конце вашей программы. Если вы не освободите его с помощью оператора Delete, ваш компьютер будет продолжать создавать новую память в куче каждый раз, когда запускается программа. Это приводит к замедлению работы вашего компьютера, поскольку память не удаляется, а доступная память уменьшается.