2013-09-05 2 views

답변

4

예, RAM에 바이트 배열을 만들어 하드 드라이브에있는 전체 메모리를 복사합니다. 따라서 거대한 파일에 QFile::readAll()을 실행하는 문제가 발생할 것입니다.

QString QTextStream::readAll()에 대한 문서는 말한다 :

스트림의 전체 내용을 읽어 내, QString로서 돌려줍니다. 대용량 파일을 작업 할 때는이 기능을 사용하지 마십시오. 상당한 용량의 메모리를 사용합니다.

QByteArray의 포인터 (하드 디스크 어딘가에 가리킬 수 있습니다 가상의 주소 여야 방법이 없기 때문에, (QFile 상속) QByteArray QIODevice::readAll()에 대해 언급하지 않지만이 동일합니다 OS에 의해 프로그램에 할당 된 메모리, 즉 스택 또는 힙).

+0

그러나 read()가 qint64를 취하고 byteArray를 반환하면 결과 qByte 배열의 길이가 qint64가되도록 qint64 길이 포인터를 사용하는 경우 ...이 Byte 배열을 나타내는 방법이 있어야 함을 의미합니다. RAM이 아닌 하드 디스크 ....? –

+0

@Anupam, 아니요, C++ 포인터가 응용 프로그램에 할당 된 가상 메모리에 있어야하므로 하드 디스크에서 바이트 배열을 나타낼 수는 없습니다. 따라서 read()는 메모리 (예 : 하드 드라이브)의 메모리를 RAM으로 복사합니다. 64 비트 int는 32 비트 int가 사용자의 필요에 충분하지 않을 수 있기 때문에 사용됩니다. 가장 큰 32 비트 int는 약 40 억 개이며 기기에서 RAM으로 5GB를 전송하려고합니다. 32 비트 정수에서는 불가능합니다. – Boris

관련 문제