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

我使用64位Linux新鲜安装的QT 5.1.0。

我把例子应用程序qtbase / examples / widgets / widgets / lineedits运行,让我们把它叫做qt5_lineedit,同时我也从qt4的源头上用类似的应用程序用qt4库构build它并运行。

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

而对于qt4_lineedit只存在一个进程,它吃:VIRT 126M RES 15848。

所以,

  1. 为什么qt5默认使用两个线程?
  2. 为什么在虚拟内存大小上如此之大?

更新。

尽pipeqt5_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 

第二个线程(不是进程)来自XCB QPA插件 ,它生成一个线程来轮询XCB事件 。 (我不知道这是为了解决XCB bug,XCB API还是什么)。

一般来说, 通过查看虚拟机摘要不能比较两个进程的内存使用情况 。 您需要正确分析进程的内存映射( /proc/pid/maps ),并计算出分配的内存量,以及在哪里获得共享,以及是否在其他进程之间共享或实际每个进程的使用情况。 而且,如果你看到动态分配内存的不同,你需要通过使用堆分析器(比如valgrind的massif)来进一步分析每个进程的使用情况。

谁说分析内存使用率是一件容易的事情? 🙂

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

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

关于内存使用情况,我没有具体的线索,但也许是由于Qt绘制它的部件的方式所引起的。

soo long zai