动态扩展数组C.

时间:2013-04-09 13:26:17

标签: c malloc realloc

我有一个程序可以计算文本文件中的单词出现次数并将它们存储在一个数组中。到目前为止,我正在使用固定数组,一切正常但现在我想将其更改为动态数组,因此永远不会浪费/需要任何内存。我知道必须使用malloc和realloc来实现这一点,但我真的不明白如何去做。

我的第一个想法是简单地计算文本文件中的单词然后malloc足够的空间为所有这些,但这将留下浪费的空间,因为重复的单词将有一个计数器增加,但不会再次添加到数组。

这种方法听起来有道理并且是实现它的最佳方式吗?如果我首先malloc一个小数组就足以找到一个单词及其计数器。然后每当我找到一个需要添加到数组的新单词时,只需重新分配足以适合另一个单词和计数器。如果它是重复的,则不需要realloc,因为现有的计数器只会递增。

1 个答案:

答案 0 :(得分:5)

通常最好(在交易速度与内存使用方面)不以100%内存利用率为目标;特别是如果你的程序只运行了有限的时间,使用比你需要的更多的内存真的不会“花费”很多,总的来说。

一种典型的方法是使动态数组具有初始大小,例如8或128或其他任何值,然后在填满时加倍。

与仅在填满时将大小增加1相比,这减少了重新分配的数量(这是昂贵的)。当然,它浪费了一些记忆。