1

我需要从大小约为 50MB 的文件中读取固定数量的字节。更准确地说,从 YUV 4:2:0 CIF/QCIF 文件中读取一帧(每帧约 25KB 到约 100KB)。不是很大的数字,但我不希望整个文件都在内存中。我正在使用 C++,在这种情况下,FILE* 或 ifstream 中的哪一个具有更好(更少/最少)的内存使用量?请多多指教。谢谢!

编辑:

我读取了固定数量的字节:25KB 或 100KB(取决于 QCIF/CIF 格式)。读数为二进制模式且只进。无需寻找。不需要写,只需要读。

编辑:

如果很难识别出更好的文件,哪一个不需要将整个文件加载到内存中?

4

4 回答 4

4

不可能说 - 这将取决于实现,以及您如何读取数据,您没有描述。一般来说,这里关于性能的问题有些毫无意义,因为它们在很大程度上取决于您对库和语言功能的实际使用、具体的实现、您的硬件等。

编辑:要回答您的扩展问题-两个库都不需要您将所有内容都读入内存。你为什么认为他们会这样做?

于 2010-04-30T17:11:33.197 回答
2

我认为最好的答案是"profile and see",但理论上 FILE* 在时间和内存使用方面应该更有效。流确实在原始读/写例程上添加了不同的包装器、错误处理程序等,等等,这可能(在您的特定情况下)影响内存使用。

于 2010-04-30T17:12:50.417 回答
1

您可以期待使用 FILE* 的可执行文件更小,因为它的支持库比 ifstream 更简单,但其他因素(运行时内存消耗和性能)很少有显着差异。但是小幅收益通常会偏向 FILE*,这也仅仅是因为它更简单。

如果您对文件进行的处理非常基本和/或您不需要解析文本输入文件,则 FILE* 将非常适合您。另一方面,如果情况相反,我会选择 ifstream - 我发现 >> 运算符比使用 fscanf 更方便、更安全。

于 2010-04-30T17:34:08.960 回答
0

性能方面,您绝对比 FILE* 更好(我前段时间在我的一个项目中对此进行了分析)。内存方面的 iostream 应该不会造成什么大问题,尽管我认为在包装 C 库时会有一些开销。

于 2010-04-30T17:24:25.180 回答