我使用全新安装的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_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/