在 QT5 和 C ++ 中使用 QThread 时,最大默认堆栈大小是多少?我的帖子中有一个 QVector ,我正在调用myvector.append()
方法,我对我的矢量有多大感兴趣。我发现uint QThread::stackSize() const
方法返回堆栈大小,但前提是它先前已被方法setStackSize()
更改,但默认的堆栈大小是多少?
答案 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位应用程序并且您在堆栈中明确地为缓冲区分配存储空间,那么只能播放堆栈大小。只使用自动QVector
或std::vector
实例并不会在堆栈上分配任何大型缓冲区 - 您需要为此使用自定义分配器。
IIRC在64位应用程序中,内存布局使得您无法在任何合理数量的线程上耗尽堆栈空间。