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