我有一个程序,它计算文本文件中的单词出现次数,并将它们存储在一个数组中。到目前为止,我使用的是固定数组,一切都很好,但现在我想将其更改为动态数组,因此永远不会浪费/需要任何内存。我知道malloc和realloc必须用来完成这一点,但我真的不知道如何去做。
我的第一个想法是简单地计算文本文件中的单词,然后为所有这些单词预留足够的空间,但这会浪费空间,因为重复的单词会增加计数器,但不会再次添加到数组中。
这个方法听起来有意义吗?是不是最好的实现方法?如果我先malloc一个小数组刚好能找到一个单词和它的计数器。然后,每次我发现一个需要添加到数组中的新单词时,就需要添加足够多的单词并计数器。如果它是重复的,则不需要realloc,因为现有的计数器只会增加。
通常情况下(就交易速度和内存使用而言)最好不要以100%的内存利用率为目标;特别是如果你的程序只运行一段有限的时间,使用比需要多一点的内存并不会"花费"很多,总的来说。
一种典型的方法是使动态数组具有初始大小,例如8或128或其他大小,然后在填充时将其加倍。
这减少了重新分配的次数(这是昂贵的),而不是仅仅在它填满时将大小增加1。当然,这会浪费一些内存。