GlobalAlloc函数GMEM_ZEROINIT参数的疑问,该如何处理
GlobalAlloc函数GMEM_ZEROINIT参数的疑问
invoke GlobalAlloc,GPTR,1000000 API中GMEM_ZEROINIT表示需要将内存块中的所有字节预先初始化为0
系统似乎不给GlobalAlloc申请的内存分配空间,他只在自己那2G的线性地址中分配给自己如果产生碎片对系统也没影响,对GlobalAlloc函数申请的内存空间中的数据预先初始化为0似乎是个假象。当给GlobalAlloc返回的指针赋值后才在物理内存中写入数据,并且物理内存中所存放的数据并不是当前进程独享的,在系统内存不够用的时候很有可能被丢到交换文件中。
GPTR 标识 为GMEM_FIXED和GMEM_ZEROINIT组合.
------解决方案--------------------
invoke GlobalAlloc,GPTR,1000000 API中GMEM_ZEROINIT表示需要将内存块中的所有字节预先初始化为0
系统似乎不给GlobalAlloc申请的内存分配空间,他只在自己那2G的线性地址中分配给自己如果产生碎片对系统也没影响,对GlobalAlloc函数申请的内存空间中的数据预先初始化为0似乎是个假象。当给GlobalAlloc返回的指针赋值后才在物理内存中写入数据,并且物理内存中所存放的数据并不是当前进程独享的,在系统内存不够用的时候很有可能被丢到交换文件中。
GPTR 标识 为GMEM_FIXED和GMEM_ZEROINIT组合.
------解决方案--------------------
- C/C++ code
#include <Windows.h> int _tmain(int argc, _TCHAR* argv[]) { void *p = GlobalAlloc(GPTR, 100); return 0; }