gpt4 book ai didi

c - 重新分配变体

转载 作者:太空狗 更新时间:2023-10-29 16:13:22 24 4
gpt4 key购买 nike

只是为了定位上下文:它是关于一个字符串池,意思是一个带有字符串键的哈希表(实际上是知道它们长度的特殊字符串,但我想这个细节在这里无关紧要)。重点是当池需要增长时调整列表数组(用作表桶)的大小。但是——这是核心细节——包含字符串的单元格实际上位于一个单元格数组中,而不是散布在内存的各个角落 [1]。因此,我不再需要列表,它们只是过时的东西。所以:

  1. 是否有 realloc 的变体,可以像 calloc 一样将内存区域“清零”?我在这里需要它,因为这些项目不仅是指针,而且是列表头:问题是确保空列表是/显示为 NULL。否则,最好的解决方案就是 memset(p, size, 0);

  2. 是否有 realloc 的变体,如果没有足够的空间在原地增长,它不会复制,而是像 alloc 一样分配?这里的问题是我不再需要数据了,因为需要根据新模数在列表中重新分配字符串。否则,最好的选择是什么?

    • 使用重新分配
    • (自由&)使用alloc
    • (自由&)使用calloc

这在任何情况下都是正确的:realloc 尝试在原地分配更多空间,否则在别处分配并静默复制?如果是,那么问题可能是(至少)三个用例需要不同的操作——在两种情况下都有或没有足够的空间——但一个函数根本没有选项:

  • 我需要更多的地方来存放这些数据,以后还会有更多的地方(标准)。
  • 我需要更多空间,但从现在开始数据都是垃圾。
  • 我需要更多空间和要“归零”的区域。

什么是最适合我的选择?你还有什么看法?在哪里可以找到有关该主题的更多思考或信息?

alloc 与 calloc 和 realloc 的接口(interface)不同是有原因的吗? (我的意思是指定总尺寸与单一尺寸和数量)

[1] 重点本来是为了制作有序的集合&映射;对于字符串池,不需要但不会打扰。相反,它使代码更清晰并提供引用位置。

最佳答案

Is there a variant of realloc that "zeroes" the memory area like calloc?

没有。

Is there a variant of realloc that does not copy if ever there is not enough space to grow on place, but instead just allocates like alloc?

没有。

如果我是你,我可能会使用 freecalloc。但理想情况下,您希望设计您的系统,以便重新分配很少,因此各种选项的不同性能特征并不重要。换句话说,请确保您选择的选项无关紧要。

关于c - 重新分配变体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13845013/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com