0

我正在尝试获取我的应用程序的内存使用情况。我跟着这个

这是我编写的代码,但在 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);
4

2 回答 2

3
int membyte = ((size_t)info.WorkingSetSize);

不要那样做。不能保证工作集的大小会在一个int可以代表的范围内。也许您想使用 aunsigned long或者,更好的是, a SIZE_T

于 2013-09-30T12:47:37.187 回答
0

改变

int membyte = ((size_t)info.WorkingSetSize);

SIZE_T membyte = info.WorkingSetSize;

文档说明了 WorkingSetSize 成员的类型,如果 SIZE_T。您将其转换为已签名的 int 类型,而 SIZE_T 未签名。

于 2013-09-30T13:04:54.557 回答