代码之家  ›  专栏  ›  技术社区  ›  Delan Azabani

为字符串分配内存的时间和内存高效方法

  •  3
  • Delan Azabani  · 技术社区  · 14 年前

    我通过将字节复制到动态数组,将文件读入C语言的内存。目前,每次有新字节进入时,我都会重新分配一个字节。这似乎没有效率。

    有些人建议(我不记得在哪里),每次需要更多的内存时加倍是好的,因为这是O(log n)分配时间,而最糟糕的情况是只有不到一半的内存没有使用。

    关于内存分配有什么建议吗?

    3 回复  |  直到 14 年前
        1
  •  6
  •   Community Doug McClean    7 年前

    如果要将整个文件加载到字符串中,则可以使用下面列出的方法 question

    但是,如果动态增长字符串,最好将其大小增加一个大于单个字节的因子(重新分配每个字节的字符串将非常慢,特别是如果字符串必须在新的内存区域中分配,然后复制过来)。既然你读的是一个加倍的文件,这可能是非常合理的。我也见过有人使用其他方法来实现这一点,例如:

    1. 我见过有人循环使用下一个幂2,例如2,4,8,然后16字节。(实际上每次都是文件大小的两倍)。

    2. 我还看到人们使用一个更适合他们想要读取的字符串的值,即一次100字节。

        2
  •  6
  •   Steve Emmerson    14 年前

    做一些建议(每次你需要更多的空间时,用一个乘法因子增加缓冲区的大小)。我做过很多次,效果很好。如果你不喜欢这两个因素,你可以用别的东西。我用了Phi(黄金比例)来达到很好的效果。

        3
  •  2
  •   Alex Reynolds    14 年前

    我前面没有这个引用,它可能是一个具体的实现细节,但是我相信Posier-2-Read大小的指针是用来调整C++ STL的大小的。 string string::capacity 方法作为字符添加。)