Document OOM conditions in the QArrayData-based containers

The other containers probably don't handle as well, so I just documented
the ones that I know how they work.

Fixes: QTBUG-75470
Change-Id: I95ecabe2f50e450c991afffd159a0483aac35a79
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
Reviewed-by: Albert Astals Cid <aacid@kde.org>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
bb10
Thiago Macieira 2019-04-29 11:13:04 -07:00
parent d62ee14283
commit b321559a22
3 changed files with 53 additions and 0 deletions

View File

@ -1043,6 +1043,23 @@ QByteArray qUncompress(const uchar* data, int nbytes)
and QByteArray() compares equal to QByteArray(""). We recommend
that you always use isEmpty() and avoid isNull().
\section1 Maximum size and out-of-memory conditions
The current version of QByteArray is limited to just under 2 GB (2^31
bytes) in size. The exact value is architecture-dependent, since it depends
on the overhead required for managing the data block, but is no more than
32 bytes. Raw data blocks are also limited by the use of \c int type in the
current version to 2 GB minus 1 byte.
In case memory allocation fails, QByteArray will throw a \c std::bad_alloc
exception. Out of memory conditions in the Qt containers are the only case
where Qt will throw exceptions.
Note that the operating system may impose further limits on applications
holding a lot of allocated memory, especially large, contiguous blocks.
Such considerations, the configuration of such behavior or any mitigation
are outside the scope of the QByteArray API.
\section1 Notes on Locale
\section2 Number-String Conversions

View File

@ -1777,6 +1777,24 @@ const QString::Null QString::null = { };
and the \c{'+'} will automatically be performed as the
\c{QStringBuilder} \c{'%'} everywhere.
\section1 Maximum size and out-of-memory conditions
The current version of QString is limited to just under 2 GB (2^31 bytes)
in size. The exact value is architecture-dependent, since it depends on the
overhead required for managing the data block, but is no more than 32
bytes. Raw data blocks are also limited by the use of \c int type in the
current version to 2 GB minus 1 byte. Since QString uses two bytes per
character, that translates to just under 2^30 characters in one QString.
In case memory allocation fails, QString will throw a \c std::bad_alloc
exception. Out of memory conditions in the Qt containers are the only case
where Qt will throw exceptions.
Note that the operating system may impose further limits on applications
holding a lot of allocated memory, especially large, contiguous blocks.
Such considerations, the configuration of such behavior or any mitigation
are outside the scope of the Qt API.
\sa fromRawData(), QChar, QLatin1String, QByteArray, QStringRef
*/

View File

@ -173,6 +173,24 @@
For a detailed discussion comparing Qt containers with each other and
with STL containers, see \l {Understand the Qt Containers}.
\section1 Maximum size and out-of-memory conditions
The current version of QVector is limited to just under 2 GB (2^31 bytes)
in size. The exact value is architecture-dependent, since it depends on the
overhead required for managing the data block, but is no more than 32
bytes. The number of elements that can be stored in a QVector is that size
divided by the size of each element.
In case memory allocation fails, QVector will use the \l Q_CHECK_PTR macro,
which will throw a \c std::bad_alloc exception if the application is being
compiled with exception support. If exceptions are disabled, then running
out of memory is undefined behavior.
Note that the operating system may impose further limits on applications
holding a lot of allocated memory, especially large, contiguous blocks.
Such considerations, the configuration of such behavior or any mitigation
are outside the scope of the Qt API.
\sa QVectorIterator, QMutableVectorIterator, QList, QLinkedList
*/