为什么 QShared Memory 创建大小和返回的大小()不同
Why QShared Memory create size and returned size() are different
我有疑问QSharedMemory
如果我创建一个共享内存并且它的大小小于 4096
size() 函数 returned 4096.
如果创建的大小大于4096,则return4096+创建的大小。
例如:
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
QSharedMemory
没问题。它向您显示真实的物理内存使用情况,这不是我们使用虚拟内存的方式。
在实践中,物理内存粒度是一页,有几个字节。通常 4096
字节。当您分配一个字节时,它会占用整个物理页面。
当一个进程处理内存时,他正在处理虚拟内存,这提供了强大的工具。例如,虚拟内存管理器可以使用相同的物理页面进行多个单字节分配。但是虚拟内存只与进程范围有关。
这里有几个进程共享的内存,所以它是一个不同的内存模型。 Qt 开发人员刚刚做出设计决策,让框架的用户可以看到这一现实。
我有疑问QSharedMemory
如果我创建一个共享内存并且它的大小小于 4096 size() 函数 returned 4096.
如果创建的大小大于4096,则return4096+创建的大小。
例如:
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
QSharedMemory
没问题。它向您显示真实的物理内存使用情况,这不是我们使用虚拟内存的方式。
在实践中,物理内存粒度是一页,有几个字节。通常 4096
字节。当您分配一个字节时,它会占用整个物理页面。
当一个进程处理内存时,他正在处理虚拟内存,这提供了强大的工具。例如,虚拟内存管理器可以使用相同的物理页面进行多个单字节分配。但是虚拟内存只与进程范围有关。
这里有几个进程共享的内存,所以它是一个不同的内存模型。 Qt 开发人员刚刚做出设计决策,让框架的用户可以看到这一现实。