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