calloc是否将整个分配归零?

Aiueiia

callocC语言中函数用于分配清零的内存,该内存至少可以容纳指定大小的元素请求数量。实际上,大多数内存分配器可能会分配更大的块,以提高效率并最大程度地减少碎片。在此类系统中,分配的实际可用块大小通常可以通过特殊功能(即_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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章