2008-11-11 37 views
41

Tôi đang cố gắng tìm ra dung lượng bộ nhớ mà ứng dụng của tôi đang tiêu thụ trong chính chương trình đó. Việc sử dụng bộ nhớ mà tôi đang tìm kiếm là số được báo cáo trong cột "Mem Usage" trên tab Processes của Windows Task Manager.Cách sử dụng bộ nhớ trong Windows trong C++

Trả lời

43

Điểm khởi đầu tốt sẽ là GetProcessMemoryInfo, báo cáo nhiều thông tin bộ nhớ khác nhau về quy trình được chỉ định. Bạn có thể vượt qua GetCurrentProcess() làm quy trình xử lý để nhận thông tin về quy trình gọi điện.

Có thể là WorkingSetSize thành viên của PROCESS_MEMORY_COUNTERS là trận đấu gần nhất với Bộ nhớ sử dụng coulmn trong trình quản lý tác vụ, nhưng sẽ không chính xác như cũ. Tôi sẽ thử nghiệm với các giá trị khác nhau để tìm ra giá trị gần nhất với nhu cầu của bạn.

8

GetProcessMemoryInfo là hàm bạn đang tìm kiếm. Các tài liệu trên MSDN sẽ chỉ cho bạn đi đúng hướng. Nhận thông tin bạn muốn ra khỏi cấu trúc PROCESS_MEMORY_COUNTERS mà bạn đã nhập.

Bạn cần bao gồm psapi.h.

6

Hãy thử xem GetProcessMemoryInfo. Tôi đã không sử dụng nó, nhưng nó trông giống như những gì bạn cần.

17

Tôi nghĩ rằng đây là những gì bạn đang tìm kiếm:

#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); 


} 
+2

Nó có lẽ không phải là những gì ông muốn biết, như bộ nhớ hệ thống đo lường này được sử dụng, không phải bộ nhớ được tiêu thụ bởi một quá trình riêng lẻ. Tuy nhiên nó có thể hữu ích để biết quá, vì vậy tôi sẽ không đánh dấu xuống nó. – CashCow

+1

Nguồn: http://msdn.microsoft.com/en-us/library/windows/desktop/aa366589%28v=vs.85%29.aspx – user956584

+0

Đây không phải là câu hỏi về, có thể hữu ích nói chung. –

1

Để bổ sung cho câu trả lời của Ronin, indead chức năng GlobalMemoryStatusEx cung cấp cho bạn các quầy thích hợp để lấy được sử dụng bộ nhớ ảo cho quá trình gọi điện thoại: chỉ cần trừ đi ullAvailVirtual từ ullTotalVirtual để nhận bộ nhớ ảo được cấp phát. Bạn có thể kiểm tra điều này cho bản thân bằng cách sử dụng ProcessExplorer hoặc một cái gì đó.

Thật khó hiểu khi hệ thống gọi GlobalMemoryStatusEx không may có mục đích hỗn hợp: nó cung cấp cả thông tin toàn hệ thống và quy trình cụ thể, ví dụ: thông tin bộ nhớ ảo.

Các vấn đề liên quan