malloc 与 calloc 疑问

这两个函数声明在stdlib.h头文件中


void *malloc(num)
在堆上申请num字节的空间,并返回空间的首地址。

void *calloc(num, size)
在堆上申请num*size字节的空间,用0填充这些空间,并返回空间的首地址。

free(void *)
释放malloc()等函数分配的空间。
为什么只需要一个指针就可以释放空间了?因为malloc()或calloc()在分配内存时,除了分配程序指定大小的空间供程序实际使用,还分配了附加的额外管理信息,这些信息根据编译器实现有所不同,一般在实际使用的空间前。这样,free()函数就能根据参数,找到管理信息,并根据管理信息释放空间了。
所以,传给free的参数,一定要是malloc()或calloc()返回的首地址,否则free找不到管理信息,就会出错。


疑问:
为什么普遍用malloc 不用calloc,是malloc效率高吗?高的话,高在哪了?不用把内存置0吗?

发布了111 篇原创文章 · 获赞 13 · 访问量 3125

猜你喜欢

转载自blog.csdn.net/wx_assa/article/details/103492696
今日推荐