我需要从文件中读取固定数量的字节,其大小约为50MB。更准确地说,从YUV 4:2:0 CIF / QCIF文件读取帧(每帧约25KB到~100KB)。数字不是很大但我不希望整个文件都在内存中。我正在使用C ++,在这种情况下,哪个FILE *或ifstream具有更好(更少/最小)的内存使用量?请提出建议。谢谢!
我读取固定字节数:25KB或100KB(取决于QCIF / CIF格式)。读数处于二进制模式且仅向前。不需要寻求。不需要写作,只能阅读。
如果难以识别它们,哪一个不需要将整个文件加载到内存中?
答案 0 :(得分:4)
不可能说 - 这将取决于实施,以及您如何阅读未描述的数据。一般来说,这里关于性能的问题有点毫无意义,因为它们在很大程度上取决于您对库和语言功能的实际使用,具体实现,硬件等等。
编辑:要回答您的扩展问题 - 两个库都不需要您将所有内容都读入内存。你为什么认为他们这样做?
答案 1 :(得分:2)
我认为最好的答案是“profile and see”,但理论上FILE *应该在时间和内存使用方面更有效率。 Streams会在原始读/写例程中添加不同的包装器,错误处理程序等等,这可能(在您的特定情况下)会影响内存使用。
答案 2 :(得分:1)
使用FILE *可以期望更小的可执行文件,因为它的支持库比ifstream更简单,但其他因素(运行时内存消耗和性能)很少产生显着差异。但是,对于FILE *来说,小的收益通常只是因为它更简单。
如果您对该文件进行的处理非常基本和/或您不需要解析文本输入文件,那么FILE *将很适合您。另一方面,如果相反,我会选择ifstream - 我找到>>操作员比使用fscanf更加方便和安全。
答案 3 :(得分:0)
性能方面你肯定更喜欢FILE *(我前段时间在一个项目中描述过)。记忆明智的iostream不应该成为一个大问题,虽然我认为它包装C库会有一些开销。