我使用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。
所以,
更新
尽管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
答案 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