# Memory

# Memory

This module includes the platform abstraction for dynamic memory allocation.

## Summary

| ### Functions ||
|---|---|
| `https://openthread.io/reference/group/plat-memory#group__plat-memory_1ga5ebc4edb990923ac45cf098b02e08be2(size_t aNum, size_t aSize)` | `void *` Dynamically allocates new memory. |
| `https://openthread.io/reference/group/plat-memory#group__plat-memory_1ga64920a791a87465bf49fa751c7677825(void *aPtr)` | `void` Frees memory that was dynamically allocated by `https://openthread.io/reference/group/plat-memory#group__plat-memory_1ga5ebc4edb990923ac45cf098b02e08be2`. |

## Functions

### otPlatCAlloc

```
void * otPlatCAlloc(
  size_t aNum,
  size_t aSize
)
```
Dynamically allocates new memory.

On platforms that support it, they should redirect to `calloc`. For those that don't support `calloc`, they should implement the standard `calloc` behavior.

See: <https://man7.org/linux/man-pages/man3/calloc.3.html>

Is required for `OPENTHREAD_CONFIG_HEAP_EXTERNAL_ENABLE`.

<br />

| Details ||
|---|---|
| Parameters | |---|---| | `[in] aNum` | The number of blocks to allocate | | `[in] aSize` | The size of each block to allocate | |
| Return Values | |---|---| | `void*` | The pointer to the front of the memory allocated | | `NULL` | Failed to allocate the memory requested. | |

### otPlatFree

```
void otPlatFree(
  void *aPtr
)
```
Frees memory that was dynamically allocated by `https://openthread.io/reference/group/plat-memory#group__plat-memory_1ga5ebc4edb990923ac45cf098b02e08be2`.

Is required for `OPENTHREAD_CONFIG_HEAP_EXTERNAL_ENABLE`.

<br />

| Details ||
|---|---|
| Parameters | |---|---| | `[in] aPtr` | A pointer the memory blocks to free. The pointer may be NULL. | |

## Resources

OpenThread API Reference topics originate from the source code, available
on [GitHub](https://github.com/openthread/openthread/tree/main/include/openthread).
For more information, or to contribute to our documentation, refer to
[Resources](https://openthread.io/resources).