2013-09-30 18 views
0

我想通過我的應用程序獲取內存使用情況。我跟着this_PROCESS_MEMORY_COUNTERS給內存使用負值

這是我編寫的代碼,但在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); 
+2

是不是size_t無符號?而你的membytes是一個(簽名)int ... – atk

回答

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

不要那樣做。不能保證工作集的大小將在int可以表示的範圍內。也許你想使用unsigned long或更好的是SIZE_T

0

變化

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

SIZE_T membyte = info.WorkingSetSize; 

的文檔說WorkingSetSize成員,如果SIZE_T的類型。 您將其轉換爲已簽名的int類型,而SIZE_T未經簽名。