4.3 KiB
title | localeTitle |
---|---|
Dynamic Memory Allocation | Динамическое распределение памяти |
Распределение динамической памяти в C ++
Что такое динамическое распределение памяти на C ++?
- Распределение памяти в C ++ относится к памяти, выделенной для переменных, которые вы используете в своей программе.
- Динамическое распределение памяти - это память, которая привязана к переменным во время выполнения, и объем требуемой памяти также определяется во время выполнения.
- Эта память исходит из кучи , тогда как нестатические переменные и локальные переменные получают память из стека .
- В C ++ программист может выполнять выделение памяти вручную и называется распределением динамической памяти .
- В C можно было выполнять динамическое распределение памяти, используя функции calloc и malloc для выделения памяти и использования свободной функции для де-распределения динамической памяти.
- В C ++ в дополнение к выше, есть две функции: новые и удаленные для выполнения динамического распределения памяти и де-распределения.
Оператор NEW
new
оператор может предоставить память программиста из кучи (если доступно). Если память, запрошенная программистом, доступна, тоnew
оператор инициализирует память, а затем возвращает адрес (ссылку) выделенной памяти.- Синтаксис
pointer-variable-type
= новыйdata-type;
Пример 1:int *ptr
= newint;
Пример 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, ваш компьютер будет продолжать создавать новую память в куче каждый раз, когда запускается программа. Это приводит к замедлению работы вашего компьютера, поскольку память не удаляется, а доступная память уменьшается.