7

当我在 Windows 上创建共享内存段(如CreateFileMapping(INVALID_HANDLE_VALUE, ...))时,除了创建更大的段并复制数据之外,还有什么方法可以调整它的大小?

我在 MSDN 中读到文件映射具有固定大小,但是否有可能在同一内存上进行新映射?就像在 Linux 中一样,您可以在其中使用shm_open()然后再ftruncate()使用mmap()它。

4

1 回答 1

6

简短的回答是否定的 - 一旦创建文件映射,您就无法调整它的大小。您描述的创建/复制顺序是我知道的通过系统页面文件支持的文件映射来完成此操作的唯一方法。

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

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

最后,还是老样子。增加了复杂性与性能。

于 2011-06-06T16:43:37.997 回答