内存管理

更新时间: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);

results matching ""

    No results matching ""