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 для назначения памяти, а затем передать указатель на другую функцию, более эффективно, чем функция, воссоздающая структуру. |