40 lines
4.3 KiB
Markdown
40 lines
4.3 KiB
Markdown
---
|
||
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, ваш компьютер будет продолжать создавать новую память в куче каждый раз, когда запускается программа. Это приводит к замедлению работы вашего компьютера, поскольку память не удаляется, а доступная память уменьшается. |