fread:如何知道缓冲区的大小?

时间:2016-04-06 10:32:32

标签: c fread

在C中,当我正在阅读文件或其他输入时,同时使用+如何知道用缓冲区声明的大小?

fread

输入数据可能有1000行或1行,甚至100000行或更多行。

它有什么一般规则吗?

1 个答案:

答案 0 :(得分:4)

不,没有一般规则,因为它完全取决于您打算如何处理数据。你需要解析它吗?那将是理想的。如果你知道你的输入有大量X字节的有用数据“samples”,那么只需一次读取X字节并随时处理它们。

如果你确实需要将整个输入复制到缓冲区中,那么你必须进行初步猜测,如果你的猜测不够,你可以分配更多的内存。

  • 在C ++中,您可以使用std::vector(如果数据不需要在内存中连续,则为std::deque),以根据需要自动扩展缓冲区。
  • 在C中,当你已经分配的空间不足时,你必须首先malloc,然后在你的阅读循环内realloc

    我建议通过使缓冲区以指数方式扩展(每次乘以1.5或2的因子)来模仿std::vector的行为,以帮助减少执行此操作所需的次数。所以,假设您首先分配1,024个字节。当用完时,分配2,048。当用完时,分配4,096。等等。

    根据您的使用案例和预期的名义输入,只有您可以决定一个好的起始大小。