C笔记——calloc函数
AMCL源码中,多次用到calloc函数,用于分配一定大小的内存,如下:
self = calloc(1, sizeof(pf_kdtree_t));
分配1个kdtree结构体所需的空间内存,并返回这块内存的指针给self。
self->nodes = calloc(self->node_max_count, sizeof(pf_kdtree_node_t));
分配max_count个kdtree_node结构体所需的内存空间,并返回这块内存的首地址指针给self_node。
set->samples = calloc(max_samples, sizeof(pf_sample_t));
分配多个粒子簇所需的内存,并返回该内存的地址。
set->clusters = calloc(set->cluster_max_count, sizeof(pf_cluster_t));
同时,AMCL源码中对释放内存也做了专门的处理。
——————————————————————————
在《C和指针》P221中写到,C函数提供了两个函数,malloc和free,分别用于执行动态内存分配和释放。这些函数维护一个可用内存池,当一个程序另外需要一些内存时,它就调用malloc函数,malloc函数从内存池中提取一块合适的内存,并向该程序返回一个指向该内存的指针。这块内存此时并没有以任何方式进行初始化,需要手动初始化。或者使用calloc函数。
malloc所分配的是一块连续的内存。
void *malloc(size_t size); void free(void *pointer);
calloc和realloc是另外两个内存分配函数。malloc和calloc之间的主要区别是calloc在返回内存的指针之前进行初始化0。calloc的参数包括所需元素的数量和每个元素的字节数。
realloc函数用于修改一个原先已经分配的内存块的大小。使用这个函数,可以使一块内存扩大或缩小。
void *calloc(size_t num_elements, size_t element_size); void realloc(void *ptr, size_t new_size);
作者:水水滴答
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。