我想问一下,如果QFile()。readAll()返回一个QByte数组,那么它是在物理内存上创建一个字节数组还是只提供一个包含Bytes位置的链表地址?
如果是以GB为单位的大型文件,可能会产生问题。
答案 0 :(得分:4)
是的,它确实在RAM中创建了一个字节数组,复制了硬盘中的整个内存。因此,您将遇到在大型文件上运行QFile::readAll()
的问题。
QString QTextStream::readAll()
的文档说:
读取流的全部内容,并将其作为QString返回。 处理大文件时避免使用此功能,因为它会占用大量文件 大量的记忆。
QByteArray QIODevice::readAll()
(由QFile
继承)没有提到它,但是它会是相同的,因为QByteArray
中的指针无法指向你硬盘中的某个地方disk(必须是OS分配给程序的虚拟内存中的地址,即堆栈或堆)。