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 位操作系统

4

1 回答 1

2

没有错QSharedMemory。它向您展示了真实的物理内存使用情况,这与我们使用的虚拟内存不同。

实际上,物理内存粒度是一个页面,它有几个字节。通常4096是字节。当您分配一个字节时,它会消耗整个物理页面。

当一个进程处理内存时,他正在处理虚拟内存,这提供了强大的工具。例如,虚拟内存管理器可以为多个一字节分配使用相同的物理页面。但是虚拟内存只在进程范围内相关。

这里你有多个进程共享的内存,所以它是一个不同的内存模型。Qt 开发人员刚刚做出设计决定,让框架的用户可以看到这一现实。

于 2015-04-24T13:23:26.127 回答