42 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			42 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| ---
 | ||
| title: malloc
 | ||
| localeTitle: таНос
 | ||
| ---
 | ||
| # malloc в C
 | ||
| 
 | ||
| malloc () - это библиотечная функция, которая позволяет C динамически выделять память из кучи. Куча - это область памяти, где что-то хранится.
 | ||
| 
 | ||
| malloc () является частью stdlib.h и для его использования вам необходимо использовать `#include <stdlib.h>` .
 | ||
| 
 | ||
| ## Использование Malloc
 | ||
| 
 | ||
| malloc () выделяет память запрошенного размера и возвращает указатель на начало выделенного блока. Чтобы удерживать этот возвращенный указатель, мы должны создать переменную. Указатель должен быть того же типа, что и в инструкции malloc.  
 | ||
| Здесь мы сделаем указатель на скоро будущий массив ints
 | ||
| 
 | ||
| ```C
 | ||
| int* arrayPtr; 
 | ||
| ```
 | ||
| 
 | ||
| В отличие от других языков, C не знает тип данных, на который он выделяет память; это нужно сказать. К счастью, C имеет функцию, называемую `sizeof()` которую мы можем использовать.
 | ||
| 
 | ||
| ```C
 | ||
| arrayPtr = (int *)malloc(10 * sizeof(int)); 
 | ||
| ```
 | ||
| 
 | ||
| Этот оператор использовал malloc для выделения памяти для массива из 10 целых чисел. Поскольку размеры могут меняться между компьютерами, важно использовать функцию sizeof () для вычисления размера на текущем компьютере.
 | ||
| 
 | ||
| Любая память, выделенная во время выполнения программы, должна быть освобождена до закрытия программы. Чтобы `free` память, мы можем использовать функцию free ()
 | ||
| 
 | ||
| ```C
 | ||
| free( arrayPtr ); 
 | ||
| ```
 | ||
| 
 | ||
| Этот оператор освободит ранее выделенную память. C не поставляется с `garbage collector` как некоторые другие языки, такие как Java. В результате память, которая не была должным образом освобождена, будет продолжать выделяться после закрытия программы.
 | ||
| 
 | ||
| # Прежде чем продолжить ...
 | ||
| 
 | ||
| ## Обзор
 | ||
| 
 | ||
| *   Malloc используется для динамического распределения памяти и полезен, когда вы не знаете объем памяти, необходимый во время компиляции.
 | ||
| *   Выделение памяти позволяет объектам существовать за пределами текущего блока.
 | ||
| *   C передает значение вместо ссылки. Использование malloc для назначения памяти, а затем передать указатель на другую функцию, более эффективно, чем функция, воссоздающая структуру. |