QThread中的堆栈大小

时间:2016-07-19 12:34:46

标签: c++ qt stack qthread

QT5 C ++ 中使用 QThread 时,最大默认堆栈大小是多少?我的帖子中有一个 QVector ,我正在调用myvector.append()方法,我对我的矢量有多大感兴趣。我发现uint QThread::stackSize() const方法返回堆栈大小,但前提是它先前已被方法setStackSize()更改,但默认的堆栈大小是多少?

2 个答案:

答案 0 :(得分:3)

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

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

如果Qthread在不同操作系统中进入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中分配新空间(预分配预定义的元素数)并确保数据存储在连续的内存空间中。看起来它不关心页面边界等。

答案 1 :(得分:1)

如果您正在编译32位应用程序并且您在堆栈中明确地为缓冲区分配存储空间,那么只能播放堆栈大小。只使用自动QVectorstd::vector实例并不会在堆栈上分配任何大型缓冲区 - 您需要为此使用自定义分配器。

IIRC在64位应用程序中,内存布局使得您无法在任何合理数量的线程上耗尽堆栈空间。