qt5:为什么2个进程和内存使用?

时间:2013-07-08 01:15:13

标签: c++ linux qt5

我使用64位Linux全新安装qt 5.1.0。

我以示例应用程序qtbase / examples / widgets / widgets / lineedits运行,让我们称之为qt5_lineedit, 我也从qt4源码中获取类似的应用程序,使用qt4库构建并运行。

在htop中我看到,有两个qt5_lineedit(我只运行一个,所以它使用了2个线程)和内存使用情况: VIRT 223M RES 18268。

虽然qt4_lineedit只存在一个进程并且它吃掉了: VIRT 126M RES 15848。

所以,

  1. 为什么qt5默认使用两个线程?
  2. 为什么虚拟内存大小有这么多差异?
  3. 更新

    尽管qt5_lineedit使用了2个pid,但它们不是进程,而是线程。 所以关于qt4_lineedit的信息如下:

    VmPeak:   130936 kB
    VmSize:   130932 kB
    VmLck:         0 kB
    VmPin:         0 kB
    VmHWM:     17140 kB
    VmRSS:     17140 kB
    VmData:     4524 kB
    VmStk:       136 kB
    VmExe:        28 kB
    VmLib:     48232 kB
    VmPTE:       220 kB
    VmSwap:        0 kB
    Threads:        1
    

    有关qt5_lineedit的信息如下:

    VmPeak:   278020 kB
    VmSize:   228584 kB
    VmLck:         0 kB
    VmPin:         0 kB
    VmHWM:     18268 kB
    VmRSS:     18268 kB
    VmData:    77468 kB
    VmStk:       136 kB
    VmExe:        28 kB
    VmLib:     50056 kB
    VmPTE:       288 kB
    VmSwap:        0 kB
    Threads:        2
    

2 个答案:

答案 0 :(得分:4)

第二个主题(非流程)来自 XCB QPA插件spawns a thread to poll for XCB events。 (我不知道是否可以解决XCB错误,XCB API或者什么。)

通常,您无法通过查看VM摘要来比较两个进程的内存使用情况。您需要正确分析进程的内存映射(/proc/pid/maps),并确定分配了多少内存,以及在其他进程之间以及它是否在每个进程的实际使用情况下共享的位置。此外,如果您发现动态分配的内存存在差异,则需要使用堆分析器(例如valgrind的massif)进一步分析每个进程的使用情况。

谁说分析内存使用是一件容易的事? :)

答案 1 :(得分:1)

我在一个简单的应用程序中发现了一些可能很有趣的线程:http://qt-project.org/forums/viewthread/10656

我自己可以想到,(我们可能都知道)QCoreApplication运行自己的事件队列。为了实现这一点,它需要一个独立的线程来阻止主线程执行。

关于内存使用情况,我没有具体的线索,但可能是因为Qt绘制小部件的方式发生了应有的变化。

soo long zai