为什么QShared内存创建大小和返回的大小()是不同的

时间:2015-04-24 07:18:05

标签: qt qsharedmemory

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

1 个答案:

答案 0 :(得分:2)

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

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

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

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