3

疑問がありますQSharedMemory

共有メモリを作成し、そのサイズが 4096 未満の場合、size() 関数は 4096 を返しました。

作成されたサイズが 4096 より大きい場合は、4096 + 作成されたサイズが返されます。

例えば:

QSharedMemory mem("MyApp");
mem.create(1);
qDebug("Size=%d",mem.size());//4096

QSharedMemory mem("MyApp");
mem.create(4095);
qDebug("Size=%d",mem.size());//4096

QSharedMemory mem("MyApp");
mem.create(4097);
qDebug("Size=%d",mem.size());//8192

正しいサイズを取得するには?

Windows 7 32 ビット OS を使用しています

4

1 に答える 1

2

に問題はありませんQSharedMemory。これは、仮想メモリで慣れているものではなく、実際の物理メモリの使用量を示しています。

実際には、物理​​メモリの粒度は、数バイトのページです。通常は4096バイト。1 バイトを割り当てると、物理ページ全体が消費されます。

プロセスがメモリを扱うとき、強力なツールを提供する仮想メモリを扱っています。たとえば、仮想メモリ マネージャーは、複数の 1 バイト割り当てに同じ物理ページを使用できます。ただし、仮想メモリはプロセス スコープでのみ関連します。

ここでは、複数のプロセスでメモリを共有しているため、メモリ モデルが異なります。Qt 開発者は、この現実をフレームワークのユーザーに見えるようにするという設計上の決定を行いました。

于 2015-04-24T13:23:26.127 に答える