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

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

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

虽然对于qt4_lineedit仅存在一个进程,但它吃掉了:
VIRT 126M RES 15848。

所以,

  • 为什么qt5默认使用两个线程?
  • 为什么虚拟内存大小差异如此之大?

  • 更新。

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

    最佳答案

    第二个线程(不是进程)来自 XCB QPA插件,即spawns a thread to poll for XCB events。 (我不知道这是否用于解决XCB错误,XCB API或其他问题。)

    通常,您无法通过查看VM摘要来比较两个进程的内存使用情况。您需要适当地分析进程的内存映射(/proc/pid/maps),并弄清分配了多少内存,在哪里分配内存以及是否在其他进程之间共享了它,或者它是每个进程的实际使用量。此外,如果看到动态分配的内存有所不同,则需要使用堆分析器(例如valgrind的块)来进一步分析每个进程的使用情况。

    谁说分析内存使用情况很容易? :)

    关于c++ - qt5 : why 2 processes and memory usage?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17517954/

    10-10 12:42