2011-06-06 222 views
7

当我在Windows上创建共享内存段(如CreateFileMapping(INVALID_HANDLE_VALUE, ...))时,是否有任何方法调整它的大小,除了创建更大的段和复制数据?Windows:调整共享内存的大小

我读过MSDN文件映射有一个固定的大小,但是有没有可能通过某种方式在相同的内存上进行新的映射?就像在Linux中一样,您可以使用shm_open(),然后再使用ftruncate()mmap()

回答

6

简短的答案是否定的 - 一旦创建文件映射,您就无法重新调整它的大小。您所描述的创建/复制序列是我意识到通过由系统分页文件支持的文件映射完成此操作的唯一方法。

也就是说,您可以自己管理支持您的映射的文件并完成此操作。从您自己的零初始化数据文件开始,并指定对CreateFileMapping()的调用的有效句柄。

当您需要调整大小时,关闭映射,扩展文件并重新创建映射。这需要在增长/截断操作之间进行一些同步 - 不是微不足道的,但也不应太困难。

最后,它是一个老的故事。增加了复杂性与性能。