【发布时间】:2012-11-30 11:12:54
【问题描述】:
只是为了定位上下文:它是关于一个字符串池,意思是一个带有字符串键的哈希表(实际上是知道它们长度的特殊字符串,但我想这个细节在这里无关紧要)。关键是当池需要增长时调整列表数组(用作表桶)的大小。但是——这是核心细节——包含字符串的单元格实际上是在一个单元格数组中,而不是分散在内存的各个角落 [1]。因此,我不再需要这些列表,它们只是过时的东西。所以:
是否有一种 realloc 变体可以像 calloc 一样将内存区域“归零”? 我在这里需要它,因为这些项目不仅是指针,而且列出了头:问题是确保一个空列表是/显示为 NULL。否则,是
memset(p, size, 0);的最佳解决方案
-
如果没有足够的空间来就地增长,是否有一种不会复制的 realloc 变体,而是像 alloc 一样分配?这里的问题是我不再需要数据,因为字符串需要根据新的模数重新分布在列表中。否则,最好的选择是什么?
- 使用重新分配
- (free &) 使用 alloc
- (免费和)使用 calloc
在任何情况下都是正确的:realloc 尝试在原地分配更多空间,否则分配到其他地方并静默复制?如果是,那么问题可能是(至少)三个用例需要不同的操作——在有或没有足够空间的两种情况下——但是一个完全没有选项的函数:
- 我需要更多的空间来存放这些数据,并且还需要更多(标准)。
- 我需要更多的地方,但从现在开始数据就是垃圾。
- 我需要更多空间和要“归零”的区域。
对我来说最好的选择是什么?你还有什么看法?我在哪里可以找到有关该主题的更多反思或信息?
alloc 与 calloc 和 realloc 有不同的接口有什么原因吗? (我的意思是指定总尺寸与单一尺寸和计数)
[1] 原来是为了做有序集合&地图;对于字符串池,它不需要但不会打扰。相反,它使代码更清晰,并提供了引用的局部性。
【问题讨论】: