2

私はqt 5.1.0の新規インストールで64 linuxを使用しています。

サンプル アプリケーション qtbase/examples/widgets/widgets/lineedits を実行して実行します。これを qt5_lineedit と呼びましょう。また、qt4 ソースから同様のアプリを取得し、qt4 ライブラリでビルドして実行します。

htop を見ると、2 つの qt5_lineedit (1 つしか実行していないため、2 つのスレッドを使用) とメモリ使用量 (VIRT 223M RES 18268) が表示されます。

qt4_lineedit の場合、プロセスは 1 つしか存在せず、VIRT 126M RES 15848 を消費します。

そう、

  1. qt5 がデフォルトで 2 つのスレッドを使用するのはなぜですか?
  2. 仮想メモリのサイズに大きな違いがあるのはなぜですか?

アップデート。

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
4

2 に答える 2

4

2 番目のスレッド (プロセスではない) は、XCB イベントをポーリングするスレッドを生成するXCB QPA プラグインから取得されます。(それが XCB のバグを回避するためなのか、XCB API なのかはわかりません。)

一般に、VM の概要を見て 2 つのプロセスのメモリ使用量を比較することはできません。プロセスのメモリ マップ ( ) を適切に分析し、/proc/pid/maps割り当てられたメモリの量と場所を把握し、それが他のプロセス間で共有されているか、プロセスごとの実際の使用量であるかを把握する必要があります。さらに、動的に割り当てられたメモリに違いがある場合は、ヒープ プロファイラー (valgrind の massif など) を使用して、プロセスごとの使用状況をさらに分析する必要があります。

メモリ使用量のプロファイリングは簡単な作業だと誰が言いましたか? :)

于 2013-07-13T10:27:51.823 に答える