QThread 中的堆栈大小

Stack size in QThread

QT5C++ 中使用 QThread 时,最大默认堆栈大小是多少?我的线程中有一个 QVector,我正在调用 myvector.append() 方法,我对我的向量有多大感兴趣。我找到了 uint QThread::stackSize() const 方法,其中 returns 堆栈大小,但前提是它以前被方法 setStackSize() 更改过,但默认堆栈大小是多少?

QThread 堆栈大小可以通过这两个调用读取和设置:

 uint QThread::stackSize() const
 void QThread::setStackSize(uint stackSize)

如果 Qthread 是 decade into OS 不同 OS 中的特定线程,在 linux 中 pthread 最大堆栈大小是 8M。

但听起来您担心 QVector 在堆栈中增长,但这并没有发生。 QVector 将数据存储在堆中。

来自QVector的源代码,

void QVector<T>::append(const T &t)
{
     ...
    if (!isDetached() || isTooSmall) {
        ...
        reallocData(d->size, isTooSmall ? d->size + 1 : d->alloc, opt);
     ...
}

它所做的一切都是在 HEAP 中分配新的 space(预先分配预定义的元素数量)并确保数据存储在连续内存中 space。看起来不像是页面边界等方面的问题

只有在编译 32 位应用程序时堆栈大小才起作用并且您在堆栈上显式地为缓冲区分配存储空间。仅使用自动 QVectorstd::vector 实例不会在堆栈上分配任何大缓冲区 - 您需要为此使用自定义分配器。

IIRC 在 64 位应用程序中,内存的布局使得您永远不会 运行 超出堆栈 space 对于任何合理数量的线程。