首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QT -主要Widget - Stack还是堆?

QT -主要Widget - Stack还是堆?
EN

Stack Overflow用户
提问于 2011-12-31 15:36:14
回答 2查看 3.3K关注 0票数 9

对于应该在堆栈上还是堆上初始化我的主小部件,我有点困惑。在“使用Qt4进行C++ GUI编程”中,主要部件在堆栈上初始化。在我多说之前,我要解释一下我的意思:

代码语言:javascript
复制
int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    MainWindow mainWin;
    mainWin.show();
    return app.exec();
}

现在,这可能只是因为它更安全,也许是因为他们不想混淆读者在QT中的内存分配。省略对继承自QObject的对象的任何删除,肯定会让读者“忘记”QT对象的内存管理。但是,我的问题是,我们是更喜欢这种方法,还是采用以下方法:

代码语言:javascript
复制
int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    MainWindow* mainWin = new MainWindow;
    mainWin->show();
    int execReturn = app.exec();
    delete mainWin;
    return execReturn;
}

我提出这个问题的主要原因是,我通常更喜欢遵循选择堆还是堆栈的模式:

  • 如果项目是大的-
  • 如果项目是长期的-
  • 否则- Stack

现在,我想我的问题归结为两个问题:

  • QWidget是否大到我应该担心堆栈溢出的程度?
  • 平均应用程序的堆栈有多大?什么时候我应该担心堆栈溢出(显然不是递归函数)?

我意识到QWidget本身不太可能导致堆栈溢出,但当然,这将超出我的应用程序可能具有的任何其他堆栈使用。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-12-31 16:02:10

您选择堆与堆栈的模式听起来是合理的,但我不太担心对象的大小。任何大型对象都应该在内部使用堆。向量通常是三个指针的大小,但可能非常大。

我认为您不应该担心任何对象都足够大,足以使堆栈本身溢出。虽然有可能,但这肯定是非常罕见的(我还没见过)。

我建议您也考虑一下简单性,您可以在堆上分配任何局部变量,然后在函数返回之前释放它,但是这将是不必要的复杂,通常被认为是错误的做法。

堆栈大小通常通过链接器设置进行配置。在Windows上,默认情况下是1MB。

票数 4
EN

Stack Overflow用户

发布于 2011-12-31 15:59:33

我更喜欢使用基于堆栈的方法,因为它只给出了简短的代码。您对堆栈溢出的担忧是合理的,但这种情况极不可能发生。

虽然我不知道QApplicationMainWindow的大小,但它(大部分)将使用堆来处理需要巨大大小的内部数据结构。因此,您不需要为可能的堆栈溢出担心那么多。

通常,Windows应用程序的堆栈大小为1MB。但是,通过更改链接器选项:/STACK,您可以很容易地进行更改。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8688956

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档