只是为了定位上下文:它是关于一个字符串池,意思是一个带有字符串键的哈希表(实际上是特殊的字符串知道它们的长度,但我想这个细节在这里是无关紧要的)。关键是当池需要增长时,调整列表数组(用作表桶)的大小。但是 - 这是核心细节 - 包含实际上在单元格数组中的字符串的单元格,而不是在内存的所有角落中展开[1]。因此,我不再需要这些列表,它们只是过时的东西。所以:
是否存在realloc变体" zeroes"内存区域如calloc?
我在这里需要它,因为这些项不仅是指针,而是列出头:问题是确保空列表/显示为NULL。否则,是memset(p, size, 0);
是否有一个realloc的变种,如果没有足够的空间可以在那里增长,那么就不会复制,而只是分配像alloc一样?这里的问题是我不再需要数据,因为字符串需要根据新的模数在列表中重新分配。另外,最好的选择是什么?
在任何情况下这是否正确:realloc尝试在地方分配更多空间,否则在其他地方分配并静默复制?如果是,那么可能存在一个问题是(至少)有三个用例需要不同的操作 - 在两种情况下都存在或者没有足够的空间 - 但是一个没有选项的单个函数:
对我来说最好的选择是什么?你觉得怎么样?我在哪里可以找到关于该主题的更多反思或信息?
为什么alloc与calloc和realloc有不同的接口? (我的意思是指定总大小与单一大小和数量)
[1]这一点最初是为了制作有序套装&地图;对于字符串池,它不是必需的,但不会打扰。相反,它使代码更清晰,并提供引用的位置。
答案 0 :(得分:4)
是否存在realloc变体,将内存区域“归零”为calloc?
没有
是否有一个realloc的变体,如果没有足够的空间可以在那里生长,那么它不会复制,而只是分配像alloc一样?
没有
如果我是你,我可能会使用free
和calloc
。但理想情况下,您希望设计系统,以便重新分配不频繁,因此各种选项的不同性能特征并不重要。换句话说,请确保选择哪个选项无关紧要。
答案 1 :(得分:1)
是否存在realloc的变体,将内存区域“归零” 释放calloc?我需要在这里,因为项目不仅是指针,而且 列出头:问题是确保空列表/显示为NULL。 否则,是memset(p,size,0)的最佳解决方案;
如果您严格按照标准进行编码,则会遇到memset
。至少这一个很容易解决。
如果您有一些特定于平台的余地,其中一些确实具有recalloc
功能。
是否存在realloc的变体,如果没有,则不会复制 足够的空间来增长,但只是分配像alloc? 这里的问题是我不再需要数据,因为字符串 需要根据新的模数在列表中重新分发。还有,什么 是最好的选择吗?
不幸的是,再次没有。
有一个proposal for C1X可以添加这两个功能(包括其他功能),但是现在你仍然遇到realloc
当前的行为。