磁贴池调整大小

如果应用程序需要更多工作集以容纳流式资源映射,可以扩大磁贴池,如果需要更少空间,可以缩小磁贴池。 另外,应用程序还可以分配额外的磁贴池用于新的流式资源。 但是,如果任何单一流式资源需要的空间超出其磁贴池中原本可用的空间,扩大磁贴池则是一个不错的选择。 流式资源无法同时映射到多个磁贴池中。

磁贴池扩大后,显示驱动程序将通过一个或多个新分配空间将额外的磁贴添加到末端。 各个分配空间的细分内容对应用程序不可见。 磁贴池的现有内存保持不变,进入内存的现有流式资源映射保持不变。

缩小磁贴池时,将从末端移除磁贴。 磁贴被移除后,空间可能会小于最初的分配空间大小,最小降至 0,这意味着新映射无法通过新大小的空间。 但是,通过新大小的空间的现有映射将保持不变并且可供使用。 只要指向驱动程序用于磁贴池内存的任何部分分配空间的映射保留,显示驱动程序将保留内存。 如果缩小后,部分内存因有对应的磁贴映射而一直保持活动状态,随后再次扩大(任何容量的)磁贴池时,将在进行任何额外分配之前先重用现有内存以提供扩大操作所需的空间大小。

为了能够保存内存,应用程序不仅需要缩小磁贴池,还需要移除/重映射通过新的较小磁贴池末端的现有映射。

缩小(和移除映射)操作不一定能立即节约内存。 内存释放取决于显示驱动程序用于磁贴池的基础分配空间的粒度。 如果缩小后恰好能空出显示驱动程序分配空间,则显示驱动程序可释放此空间。 如果磁贴池曾被扩大,则缩小至原有大小(并相应移除/重映射磁贴映射)最有可能实现内存节约,但在大小与显示驱动程序选择的基础分配空间大小不完全一致的情况下无法保证。

映射到磁贴池