使用GlobalMemoryStatus()函数获取内存大小与实际内存不一致的问题

//获取内存大小
CString mem;

MEMORYSTATUS memoryStatus;

memset(&memoryStatus, 0, sizeof(MEMORYSTATUS));
memoryStatus.dwLength = sizeof(MEMORYSTATUS);

GlobalMemoryStatus(&memoryStatus);

mem.Format("%d Mb", memoryStatus.dwTotalPhys/(1024*1024));

printf("System memory is: %s\n", mem);

  以上代码段用于获取系统内存的大小。但是实际使用的时候发现获得的内存大小和实际内存大小不一致,实际内存为8G,但是只获取了4G,相差了一倍。经过分析,发现原来是GlobalMemoryStatus()函数识别不了大于2G的内存,应该使用GlobalMemoryStatusEx()。正确代码如下:

//获取内存大小
CString mem;

MEMORYSTATUSEX memoryStatus;

memset(&memoryStatus, 0, sizeof(MEMORYSTATUSEX));
memoryStatus.dwLength = sizeof(MEMORYSTATUSEX);

GlobalMemoryStatusEX(&memoryStatus);

mem.Format("%d Mb", memoryStatus.ullTotalPhys/(1024*1024));

printf("System memory is: %s\n", mem);

  

posted @ 2012-12-20 18:20  @不系之舟  阅读(1763)  评论(0)    收藏  举报