【发布时间】:2015-04-13 18:43:22
【问题描述】:
每个人都知道:
-
realloc调整现有内存块的大小或将其复制到更大的块中。 -
calloc确保内存清零并防止算术溢出,通常适用于大型数组。
为什么 C 标准不提供像下面这样结合上述两者的函数?
void *recalloc(void *ptr, size_t num, size_t size);
它对于调整巨大的哈希表或自定义内存池的大小不是很有用吗?
【问题讨论】:
-
如果您只是将所有内容归零,那么调整大小没有什么意义 - 只需释放旧块,然后调用新块。
-
@PaulR:大概它只会将新内存清零(或者更确切地说,确保清零)。
-
标准库的重点不是提供丰富的炫酷功能。它提供了一组基本的构建块,您可以从中构建自己的酷功能。你的recalloc提案写起来很简单,因此,标准库不应该提供。
-
对我来说似乎是一个足够公平的提议,考虑所有因素
-
calloc()有另一个malloc()没有的特性:在像 DOS 这样的神秘系统中:分配大于SIZE_MAX的数组的能力。因此代码可以calloc(60000u, sizeof (double)),即使size_t是16 位。我想知道这是否符合 C 规范 - 但它似乎是正确的。
标签: c malloc allocation realloc calloc