C中的内存优化,包含100万条记录的数组

时间:2012-09-02 16:36:04

标签: c optimization memory

我正在编写一个程序,要求我创建一个包含一百万条记录的数组。数组索引是唯一的ID(0百万代表唯一的产品ID)。首先,所有元素都初始化为零。它们会根据销售的产品而增加。

然而,这种方法具有很高的空间复杂度(4 *百万字节)。后来我发现只有某些产品需要经常更新。那么有什么方法可以减少内存使用量并跟踪所有产品?

4 个答案:

答案 0 :(得分:1)

如果您不需要频繁更新,则可以将所有结果存储在文件中。每当您更新任何条目时,您只需创建一个临时文件,其中包含所有其他条目以及更新的条目。之后,您只需使用rename(temp,new);更改临时文件的名称即可。

虽然,一百万条记录不需要那么多内存(只有4兆字节)。所以,你的方法是最好的,也是最简单的方法。

最好的方法(算法)是创建一个哈希表来存储所有条目。但是如果你不是C的专家,那么制作一个哈希表对你来说可能是一个问题。

答案 1 :(得分:1)

这听起来更像是数据库中的表而不是内存中的数组。如果您的用例允许,我会使用数据库。

否则,如果在您的用例中:

  1. 最终将使用相当一部分产品,
  2. RAM有限,
  3. 外部存储(磁盘,串行内存)可用,
  4. 需要与RAM速度相当的平均访问性能,
  5. 增加最坏情况下的访问时间是可以接受的,
  6. 那么你可以试试某种缓存方案(也许可以吗?)。这将使用更多的代码空间,稍微增加您的平均访问时间,并且更显着地增加您的最坏情况访问时间。

    如果很大一部分产品不仅不经常使用,但从未使用过,那么你应该研究一下@fatrock92对哈希表的建议。

答案 2 :(得分:0)

最好使用动态分配内存的数组。 使用malloc或realloc可以为您提供更好的内存分配方式 我想你知道如何使用malloc和realloc

答案 3 :(得分:0)

您可以使用link list,因此您可以在需要时添加或更新列表中的元素 您还可以在每个节点中保留上次访问权限,这样您就可以删除最近未使用过的节点。