|
同,但它们都是32位元的无正负号整数。如果将第一个参数设定为0,那么您就可以更有效地使用旗标GMEM_FIXED。在这种情况下,GlobalAlloc传回的整体代号实际是指向所配置记忆体块的指标。
如果不喜欢将记忆体块中的每一位元都初始化为0,那么您也能够使用旗标GMEM,_ZEROINIT。在Windows表头档案中,简洁的GPTR旗标定义为GMEM_FIXED和GMEM_ZEROINIT旗标的组合:
下面是一个重新配置函式:
如果记忆体块扩大了,您可以用GMEM_ZEROINIT旗标将新的位元组设为0。
下面是获得记忆体块大小的函式:
释放记忆体块的函式:
在早期16位元的Windows中,因为Windows不能在实体记忆体中移动记忆体块,所以禁止使用GMEM_FIXED旗标。在32位元的Windows中,GMEM_FIXED旗标很常见。这是因为它将传回一个虚拟位址,并且作业系统也能够通过改变记忆体页映射表在实体记忆体中移动记忆体块。因此为16位元的Windows写程式时,GlobalAlloc推荐使用GMEM_MOVEABLE旗标。在Windows的表头档案中还定义了一个简写识别字,用此识别字可以在可移动的记忆体之外填0:
GMEM_MOVEABLE旗标允许Windows在虚拟记忆体中移动一个记忆体块。这不是说将在实体记忆体中移动记忆体块,只是应用程式用於读写这块记忆体的位址可以被变动。
尽管GMEM_MOVEABLE是16位元Windows的通则,但是它的作用现在已经少得多了。如果您的应用程式频繁地配置、重新配置以及释放不同大小的记忆体块,应用程式的虚拟位址空间将会变得支离破碎。可以想像得到,最後虚拟记忆体位址空间就会被用完。如果这是个可能会发生的问题,那么您将希望记忆体是可移动的。下面就介绍如何让记忆体块成为可搬移位置的。
首先定义一个指标(例如,一个int型态的)和一个GLOBALH |