gpt4 book ai didi

c - 存储一系列大小未知的值的最有效方法是什么?

转载 作者:太空宇宙 更新时间:2023-11-04 00:55:14 24 4
gpt4 key购买 nike

我有一个生成 size_t 值的函数(例如,名为 next_entity)。该函数充当生成器,即它在每次调用时生成一个新值,最后返回 0 作为哨兵。

在调用 next_entity 的另一个函数中,我需要将值存储在某处。在我收到哨兵之前我不知道这些值的数量,所以我不能 malloc 或在它们到来之前静态分配一个数组来包含这些值。

问题是,在哨兵到来之后,我唯一需要对这些值做的就是将它们保存到一个文件中,但不能重复,也就是说,每个值只能出现一次。

之后,就不再需要这些值了。

我尝试在迭代期间使用 glib.h 中的 GHashTable 将值存储为键,但是 GHashTable 的问题是指向传递给函数 g_hash_table_insert 的键的指针必须在哈希表的生命周期内保持事件状态,因此我必须为每个新值执行某种malloc(sizeof(size_t))

可以用,但是好像效率很低,因为malloc比较耗时。

有更好的方法吗?

如果需要,我可以发布真正的代码,但我不认为问题出在代码上。

如有任何帮助,我们将不胜感激,在此先感谢您!

最佳答案

如果您的数据大小不是千兆字节,您可以使用动态数组,每次用完空间时使用 realloc() 将其大小加倍。使用此策略,只需进行 log(N) 次重新分配。

例如,在 C++ 中,许多 std::vector 实现通常就是这样做的。

关于c - 存储一系列大小未知的值的最有效方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5153117/

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