我正在尝试通过我的应用程序获取内存。我跟着this
这是我写的代码,但是在1 GB之后它给出了负值。
_PROCESS_MEMORY_COUNTERS info;
GetProcessMemoryInfo( GetCurrentProcess( ), &info, sizeof(info) );
int membyte = ((size_t)info.WorkingSetSize);
QString s1 = "MB";
double mem = membyte/1048576.0;
if(mem>900.0)
{
mem = mem/1024.0;
s1 = "GB";
}
double f,i,t1,t2;
f = modf (mem , &i);
f = f*100;
t1 = modf(f,&t2);
mem = i + (t2/100.0);
答案 0 :(得分:3)
int membyte = ((size_t)info.WorkingSetSize);
不要那样做。无法保证工作集大小将在int
可以表示的范围内。也许你想使用unsigned long
,或者更好的是SIZE_T
。
答案 1 :(得分:0)
更改
int membyte = ((size_t)info.WorkingSetSize);
到
SIZE_T membyte = info.WorkingSetSize;
文档说明了SIZE_T的WorkingSetSize成员的类型。 你将它转换为有符号的int类型,而SIZE_T是无符号的。