内存管理
更新时间:2019-01-28 11:10:44
概念
内存管理是指软件运行时系统内存资源的分配和使用的技术。其最主要的目的是如何高效,快速的分配,并且在适当的时候释放和回收内存资源。
API列表
aos_malloc() | 从系统heap分配内存给用户 |
---|---|
aos_zalloc() | 从系统heap分配内存给用户,并且将分配的内存初始化为0 |
aos_calloc() | 从系统heap分配内存给用户,并且将分配的内存初始化为0 |
aos_realloc() | 重新调整之前调用 aos_malloc(aos_calloc、aos_zalloc) 所分配的内存块的大小 |
aos_free() | 释放分配的内存 |
API 详情
aos_malloc()
定义描述
函数原型
|
void *aos_malloc(unsigned int size) |
|
描述
|
从系统堆中分配size字节内存区域
|
|
参数
|
size: 要分配内存区域的字节数
|
|
返回值
|
如果分配成功,返回所分配的内存区域起始地址指针;如果失败,返回NULL
|
调用示例
char *ptr = NULL;
unsigned int size = 64;
ptr = (char*)aos_malloc(size);
if (NULL == ptr) {
printf("aos_malloc failed\r\n");
...
}
aos_zalloc()
定义描述
函数原型
|
void *aos_zalloc(unsigned int size) |
|
描述
|
从系统堆中分配size字节内存区域,并将内存初始化填充0
|
|
参数
|
size: 要分配内存区域的字节数
|
|
返回值
|
如果分配成功,返回所分配的内存区域起始地址指针;如果失败,返回NULL
|
调用示例
char *ptr = NULL;
unsigned int size = 64;
ptr = (char*)aos_zalloc(size);
if (NULL == ptr) {
printf("aos_zalloc failed\r\n");
}
aos_calloc()
定义描述
函数原型
|
void *aos_calloc(unsigned int nitems, unsigned int size) |
|
描述
|
从系统堆中分配nitems * size字节连续内存区域,并将内存区域初始化填充0
|
|
参数
|
nitems: 要分配内存区域单元个数
size : 每个内存区域单元的字节数
|
|
返回值
|
如果分配成功,返回所分配的内存区域起始地址指针;如果失败,返回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()
定义描述
函数原型
|
void *aos_realloc(void *mem, unsigned int size) |
|
描述
|
如果mem指针为NULL,则新分配size大小的内存区域;如果mem指针非NULL,先判断原指针mem是否有足够的连续空间,如果有,扩大mem指向的地址,并且将mem指针返回,如果空间不够,按照size指定的大小分配空间(size的大小可以比原mem内存大,也可以比原mem内存小)。在分配成功的前提下,将原有数据从mem指向的内存区域拷贝到新分配的内存区域,而后释放原来mem所指内存区域,同时返回新分配的内存区域的首地址,若分配失败,则不释放原来的内存区域,并返回NULL。
对于拷贝数据的大小,如果新分配的内存区域size比原来mem指向内存区域大,则只拷贝原来mem指向内存区域长度字节数据到新分配的内存区域;否则,只拷贝size字节的数据到新分配的内存区域。
|
|
参数
|
mem: 原内存区域起始地址指针
size : 本次操作期望新分配的内存区域大小
|
|
返回值
|
如果分配成功,返回新分配的内存区域起始地址指针;如果失败,返回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);