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

40 lines
4.3 KiB
Markdown
Raw Normal View History

2018-10-12 20:00:59 +00:00
---
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, ваш компьютер будет продолжать создавать новую память в куче каждый раз, когда запускается программа. Это приводит к замедлению работы вашего компьютера, поскольку память не удаляется, а доступная память уменьшается.