内存管理是指软件运行时系统内存资源的分配和使用的技术。其最主要的目的是如何高效,快速的分配,并且在适当的时候释放和回收内存资源。
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);
在文档使用中是否遇到以下问题
更多建议
匿名提交