内存管理是指软件运行时系统内存资源的分配和使用的技术。其最主要的目的是如何高效,快速的分配,并且在适当的时候释放和回收内存资源。

API列表

aos_malloc() 从系统heap分配内存给用户
aos_zalloc() 从系统heap分配内存给用户,并且将分配的内存初始化为0
aos_calloc() 从系统heap分配内存给用户,并且将分配的内存初始化为0
aos_realloc() 重新调整之前调用 aos_malloc(aos_calloc、aos_zalloc)所分配的内存块的大小
aos_free() 释放分配的内存

使用

添加该组件

内存管理是AliOS Things 默认添加的组件,开发者无需再手动添加。

包含头文件

#include <aos/kernel.h>

使用示例

char *buf =  (char*)aos_malloc(100);
……
buf = aos_realloc(buf, 200);
……
aos_free(buf);
……

API 详情

内存管理的应用层API说明请参考include/aos/kernel.h

aos_malloc()

从系统heap分配内存给用户。

函数原型

void *aos_malloc(unsigned int size);

输入参数

size 要分配内存块的字节数 100

返回参数

如果分配成功,返回所分配的内存区域起始地址指针;如果失败,返回NULL。

调用示例

char *ptr = NULL;
unsigned int size = 64;

ptr = (char*)aos_malloc(size);
if (NULL == ptr) {
    printf("aos_malloc failed\r\n");
    ...
}

aos_zalloc()

从系统heap分配内存给用户,并且将分配的内存初始化为0。

函数原型

void *aos_zalloc(unsigned int size);

输入参数

size 要分配内存块的字节数 64

返回参数

如果分配成功,返回所分配的内存区域起始地址指针;如果失败,返回NULL。

调用示例

char *ptr = NULL;
unsigned int size = 64;

ptr = (char*)aos_zalloc(size);
if (NULL == ptr) {
    printf("aos_zalloc failed\r\n");
}

aos_calloc()

从系统heap分配内存给用户,并且将分配的内存初始化为0。

函数原型

void *aos_calloc(unsigned int nitems, unsigned int size);

输入参数

nitems 要分配内存块个数 10
size 每个内存块的字节数 64

返回参数

如果分配成功,返回所分配的内存区域起始地址指针;如果失败,返回NULL。

调用示例

char *ptr = NULL;
unsigned int size = 64;
unsigned int n = 10;

ptr = (char*)aos_calloc(n, size);
if (NULL == ptr) {
    printf("aos_calloc failed\r\n");
}

aos_realloc()

重新调整之前调用 aos_malloc/aos_calloc/aos_zalloc所分配的内存块的大小。当分配成功时,从原内存块拷贝数据到新分配的内存块,同时释放原内存块,返回新分配的内存块地址。若分配失败,则不释放原来的内存区域,并返回NULL。对于拷贝数据的大小,如果新分配的内存块比原内存块大,则只拷贝原内存块长度的数据到新分配的内存块;否则,只拷贝新分配内存块长度的数据。

函数原型

void *aos_realloc(void *mem, unsigned int size);

输入参数

mem 原内存块起始地址。若该指针为NULL,则直接分配内存
size 本次操作期望新分配的内存区域大小。若该值为0,则释放mem指向的内存,不分配新内存块 64

返回参数

如果分配成功,返回新分配的内存区域起始地址指针;如果失败,返回NULL。

调用示例

char *ptr = NULL;
char *newptr = NULL;
unsigned int size = 64;

ptr = (char*)aos_malloc(size);
if (NULL == ptr) {
    printf("aos_malloc failed\r\n");
    ...
}
...
size = 100;
newptr = (char*)aos_realloc(ptr, size);
if (NULL == ptr) {
    printf("aos_realloc failed\r\n");
}

aos_free()

释放分配的内存。

函数原型

void aos_free(void *mem);

输入参数

mem 要释放的内存区域起始地址指针

返回参数

调用示例

char *ptr = NULL;
unsigned int size = 64;

ptr = (char*)aos_malloc(size);
if (NULL == ptr) {
    printf("aos_malloc failed\r\n");
    ...
}
...
aos_free(ptr);