标准C 库提供了一系列在堆内存空间分配和释放内存的函数,Contiki 平台可以为堆指定内存空间区域。因为动态分配可能产生内存碎片,所以在内存受限的系统中静态内存分配更适合,malloc函数实现中,可变大小的动态内存对象分配与释放方法可能会存在问题。malloc 堆内存分配器API 函数描述如下:
标准C 库头文件stdlib.h 中声明了以上几个函数,函数malloc()在堆内存中分配参数size指定字节数大小的内存对象。如果函数malloc()成功分配了内存,则返回指向该内存区域的指针。如果堆内存中没有足够大的连续空闲内存,则malloc()函数返回NULL。
函数calloc()与函数malloc()类似,但仍需保证初始化分配的内存值为0。函数calloc()有两个参数,参数number 表示函数calloc()要分配的参数size 指定大小的具体内存对象的数量,因此,这两个参数的乘积就是请求分配的内存块的大小。(www.xing528.com)
函数realloc()以size 参数指定字节数重新分配以前已分配的ptr指针指向内存块,如果分配的新内存块较小,拷贝旧内存块中size 大小字节数的数据到新内存块中。如果新内存块较大,将拷贝整个旧内存块中的数据,新内存块的剩余空间可能包含未指定的数据。一旦新内存块已被分配,旧内存块中的内容已经被复制到新内存块,旧内存块会被释放。如果该内存块重新分配失败,函数realloc()返回空指针。如果该内存块重新分配成功,函数realloc()返回该新内存块的指针。
函数free()用以释放之前通过malloc()、calloc()或realloc()分配的内存块,参数ptr必须指向一个已分配内存的起始位置。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。