2011-06-06 100 views
7

當我在Windows上創建共享內存段(如CreateFileMapping(INVALID_HANDLE_VALUE, ...))時,是否有任何方法調整它的大小,除了創建更大的段和複製數據?Windows:調整共享內存的大小

我讀過MSDN文件映射有一個固定的大小,但是有沒有可能通過某種方式在相同的內存上進行新的映射?就像在Linux中一樣,您可以使用shm_open(),然後再使用ftruncate()mmap()

回答

6

簡短的答案是否定的 - 一旦創建文件映射,您就無法重新調整它的大小。您所描述的創建/複製序列是我意識到通過由系統分頁文件支持的文件映射完成此操作的唯一方法。

也就是說,您可以自己管理支持您的映射的文件並完成此操作。從您自己的零初始化數據文件開始,並指定對CreateFileMapping()的調用的有效句柄。

當您需要調整大小時,關閉映射,擴展文件並重新創建映射。這需要在增長/截斷操作之間進行一些同步 - 不是微不足道的,但也不應太困難。

最後,它是一個老的故事。增加了複雜性與性能。