【发布时间】:2013-09-05 03:43:34
【问题描述】:
我想问如果 QFile().readAll() 返回一个 QByte Array 那么它是在物理内存上创建一个字节数组还是只提供一个包含字节位置的链表地址?。
对于以 GB 为单位的大文件是否会产生问题。
【问题讨论】:
我想问如果 QFile().readAll() 返回一个 QByte Array 那么它是在物理内存上创建一个字节数组还是只提供一个包含字节位置的链表地址?。
对于以 GB 为单位的大文件是否会产生问题。
【问题讨论】:
是的,它确实在 RAM 中创建了一个字节数组,复制了硬盘中的整个内存。所以你会遇到在大文件上运行QFile::readAll() 的问题。
QString QTextStream::readAll() 的文档说:
读取流的全部内容,并将其作为 QString 返回。 在处理大文件时避免使用此功能,因为它会消耗 大量的内存。
QByteArray QIODevice::readAll() 没有提到它(由QFile 继承),但它会是一样的,因为QByteArray 中的指针不可能指向硬盘中的某个位置(必须是地址在操作系统分配给程序的虚拟内存中,即堆栈或堆)。
【讨论】: