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);
posted @ 2021-07-15 10:19  水水滴答  阅读(215)  评论(0编辑  收藏  举报