首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >realloc变体

realloc变体
EN

Stack Overflow用户
提问于 2012-12-12 17:11:42
回答 2查看 241关注 0票数 3

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

  1. 有没有像calloc这样的“零”内存区域的realloc变体?我需要这样做,因为条目不仅是指针,而且是列表标题:问题是确保空列表为空/显示为NULL。否则,仅仅是对memset(p, size, 0);的最佳解决方案
  2. 有没有一个变体的realloc没有复制,如果没有足够的空间增长的地方,而是只是分配像分配?这里的问题是,我不再需要数据了,因为字符串需要按照新的模块在列表中重新分配。否则,最好的选择是什么?
代码语言:javascript
复制
- use realloc
- (free &) use alloc
- (free &) use calloc

这在任何情况下都是正确的: realloc试图分配更多的位置空间,其他分配到其他地方并静默复制?如果是的话,那么一个问题可能是需要(至少)三个不同操作的用例--在这两种情况下都有或没有足够的空间--但是一个功能没有任何选择:

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

对我来说最好的选择是什么?你还以为呢?我在哪里能找到更多关于这个话题的反射或信息?

为什么alloc与calloc和realloc有不同的接口?(我的意思是指定总尺寸与单号和单数)

这一点最初是为了建立有序集&映射;对于字符串池来说,它是不需要的,但不需要麻烦。相反,它使代码更加清晰,并提供了引用的局部性。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-12-12 19:27:06

有没有像calloc这样的“零”内存区域的realloc变体?我需要这样做,因为条目不仅是指针,而且是列表标题:问题是确保空列表为空/显示为NULL。否则,是对memset的最佳解决方案(p,size,0);

如果您严格按照标准编写代码,那么您就只能使用memset了。至少这个很容易解决。

如果您有一些特定于平台的余地,其中一些确实有一个recalloc函数。

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

不幸的是,也没有。

有一个C1X提案,它添加了这两个特性(以及其他特性),但目前您还停留在realloc的当前行为中。

票数 1
EN

Stack Overflow用户

发布于 2012-12-12 17:36:45

有没有像calloc这样的“零”内存区域的realloc变体?

不是的。

有没有一个变体的realloc没有复制,如果没有足够的空间增长的地方,而是只是分配像分配?

不是的。

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

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13845013

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档