【问题标题】:Resizing string arrays that may be too big调整可能太大的字符串数组的大小
【发布时间】:2013-06-17 05:33:53
【问题描述】:

一些背景知识:我正在编写一个 C 函数,它将文件中的文本读取到动态重新分配的数组中。我从BUF_SIZE 字符开始,读到达到极限,然后重新分配。完成后,我将\0 附加到文本的末尾(而不是数组的末尾)。

将数组留得太大(并丢失一点内存——非常少)或realloc() 留给较小的大小是否更好?

【问题讨论】:

  • 那么你是在做指数级存储扩展吗?
  • 致@H2CO3 的第一条评论:我只是重新分配到当前大小+BUF_SIZE。对于第二条评论:是的,这就是我的猜测。谢谢!
  • 从统计上讲,每次达到旧限制时都值得将分配大小加倍。 (我可以把它写成答案吗?)
  • 请随意。感谢您的帮助!

标签: c memory memory-management malloc realloc


【解决方案1】:

不要打扰realloc()ing 到最终大小。当不再需要内存时,无论如何你都会free()它,除非字符串很大,否则即使你realloc()它的大小更小,malloc()的对齐要求也不会改变空间实际上是保留的,所以你只是对一个相当昂贵的函数进行了多余的调用。

TL;DR:不要缩小数组!

还有一个很好的建议:从统计上讲,每次达到之前的限制时,都值得将分配大小加倍。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-19
    • 2019-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-01
    相关资源
    最近更新 更多