calloc
C语言中的函数用于分配清零的内存,该内存至少可以容纳指定大小的元素请求数量。实际上,大多数内存分配器可能会分配更大的块,以提高效率并最大程度地减少碎片。在此类系统中,分配的实际可用块大小通常可以通过特殊功能(即_msize
或)发现malloc_usable_size
。
是否calloc
要确保将整个可用块都清零,还是只将请求的count * size部分分配为零?
这取决于实现方式。该标准不要求其零以上于请求的内存大小。
该标准说:
概要
#include <stdlib.h> void *calloc(size_t nmemb, size_t size);
描述
calloc函数为nmemb对象数组分配空间,每个对象的大小均为size。该空间初始化为所有零位。
我会说,很明显,除了您在calloc
调用中请求的空间之外,这不会强制将其他任何内容清零。
这来自现有的实现:
PTR memset (PTR dest, register int val, register size_t len) {
register unsigned char *ptr = (unsigned char*)dest;
while (len-- > 0)
*ptr++ = val;
return dest;
}
void bzero (void *to, size_t count) {
memset (to, 0, count);
}
PTR calloc (size_t nelem, size_t elsize) {
register PTR ptr;
if (nelem == 0 || elsize == 0)
nelem = elsize = 1;
ptr = malloc (nelem * elsize);
if (ptr) bzero (ptr, nelem * elsize);
return ptr;
}
它只会将您请求的内存清零。其他实现可能会有所不同。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句