我想知道我的應用程序在程序本身內佔用了多少內存。我正在查找的內存使用量是在Windows任務管理器的「進程」選項卡上的「內存使用量」列中報告的數量。如何獲得C++在Windows下的內存使用情況
41
A
回答
43
一個好的起點是GetProcessMemoryInfo,它報告有關指定進程的各種內存信息。您可以通過GetCurrentProcess()
作爲進程句柄來獲取有關調用進程的信息。
PROCESS_MEMORY_COUNTERS
的WorkingSetSize
成員可能與任務管理器中的Mem Usage coulmn最接近,但它不會完全相同。我會嘗試不同的價值觀來找到最接近您需求的價值觀。
8
GetProcessMemoryInfo是你正在尋找的功能。 MSDN上的文檔將爲您指出正確的方向。從您傳入的PROCESS_MEMORY_COUNTERS結構中獲取想要的信息。
您需要包含psapi.h。
6
試試看看GetProcessMemoryInfo。我沒有使用它,但它看起來像你所需要的。
17
我想這就是你要找的人:
#include<windows.h>
#include<stdio.h>
#include<tchar.h>
// Use to convert bytes to MB
#define DIV 1048576
// Use to convert bytes to MB
//#define DIV 1024
// Specify the width of the field in which to print the numbers.
// The asterisk in the format specifier "%*I64d" takes an integer
// argument and uses it to pad and right justify the number.
#define WIDTH 7
void _tmain()
{
MEMORYSTATUSEX statex;
statex.dwLength = sizeof (statex);
GlobalMemoryStatusEx (&statex);
_tprintf (TEXT("There is %*ld percent of memory in use.\n"),WIDTH, statex.dwMemoryLoad);
_tprintf (TEXT("There are %*I64d total Mbytes of physical memory.\n"),WIDTH,statex.ullTotalPhys/DIV);
_tprintf (TEXT("There are %*I64d free Mbytes of physical memory.\n"),WIDTH, statex.ullAvailPhys/DIV);
_tprintf (TEXT("There are %*I64d total Mbytes of paging file.\n"),WIDTH, statex.ullTotalPageFile/DIV);
_tprintf (TEXT("There are %*I64d free Mbytes of paging file.\n"),WIDTH, statex.ullAvailPageFile/DIV);
_tprintf (TEXT("There are %*I64d total Mbytes of virtual memory.\n"),WIDTH, statex.ullTotalVirtual/DIV);
_tprintf (TEXT("There are %*I64d free Mbytes of virtual memory.\n"),WIDTH, statex.ullAvailVirtual/DIV);
_tprintf (TEXT("There are %*I64d free Mbytes of extended memory.\n"),WIDTH, statex.ullAvailExtendedVirtual/DIV);
}
1
,以補充羅寧的回答,indead功能GlobalMemoryStatusEx
給你正確的計數器導出虛擬內存使用調用進程:剛。減去ullAvailVirtual
從ullTotalVirtual
獲得分配的虛擬內存。你可以使用ProcessExplorer或其他的東西來檢查你的自我。
令人困惑的是,系統調用GlobalMemoryStatusEx
不幸具有混合的目的:它提供系統範圍和特定於過程的信息,例如,虛擬內存信息。
相關問題
- 1. OSX - 如何獲得NSTask的內存使用情況?
- 2. 如何獲得已啓動進程的內存使用情況
- 3. 如何獲得Apache Cordova中的CPU和內存使用情況?
- 4. 如何獲取c#應用程序的內存使用情況?
- 5. Windows vs Linux的內存使用情況
- 6. 如何在Windows中查看詳細的內存使用情況?
- 7. 如何在Windows中控制MongoDB的內存使用情況?
- 8. 如何在不使用Rails的情況下獲得DateTime?
- 9. Windows 2012 SNMP內存使用情況OID
- 10. Windows上C++應用程序的內存使用情況
- 11. 如何在不使用免費()的情況下釋放內存
- 12. 如何在不分配內存的情況下測量.net應用程序的內存使用情況?
- 13. CAAnimation鏈接情況下的內存使用情況
- 14. 通過getMemoryMXBean()和jvisualvm獲得內存使用情況的差異?
- 15. Objective-C內存使用情況
- 16. C++指針內存使用情況
- 17. 獲取GPU內存使用情況
- 18. 如何測量內存使用情況
- 19. 如何分析內存使用情況?
- 20. 如何獲得cpu的速率(top/ps)和內存的使用情況?
- 21. 如何獲取WIndows Phone 7的CPU和內存使用情況統計信息?
- 22. 如何查看/報告Windows Azure CPU和內存使用情況?
- 23. 如何跟蹤C++中的內存使用情況
- 24. 如何知道C++中的內存使用情況
- 25. 如何跟蹤visual studio 2017(C++)中的內存使用情況?
- 26. 如何跟蹤C中的內存使用情況?
- 27. 如何在沒有使用C#的內存泄漏的情況下獲取Active Directory中的用戶列表
- 28. 內存使用情況
- 29. iphone內存使用情況
- 30. Tcl_Format內存使用情況
這可能不是他想知道的,因爲這是測量系統使用的內存,而不是個別進程所消耗的內存。然而,知道也是有用的,所以我不會低估它。 – CashCow 2012-09-21 11:25:46