如何使用C 運行時獲取記憶體使用資訊
簡介
監控記憶體使用情況對於優化程式效能和防止記憶體洩漏至關重要。在 C 中,獲取有關記憶體消耗的即時資訊對於各種調試和優化目的至關重要。
問題陳述
OP 嘗試利用getrusage() 來在程式執行期間檢索記憶體使用統計資料(VIRT 和RES),但總是遇到零
解
在Linux 系統上,透過ioctl() 檢索記憶體使用情況可能具有挑戰性。相反,更可靠的方法是從 /proc/pid 中的文件存取資訊。以下C 程式碼片段示範如何實作此方法:
#include <unistd.h> #include <ios> #include <iostream> #include <fstream> #include <string> void process_mem_usage(double& vm_usage, double& resident_set) { using namespace std; ifstream stat_stream("/proc/self/stat", ios_base::in); // Ignore irrelevant fields string pid, comm, state, ppid, pgrp, session, tty_nr, tpgid, flags, minflt, cminflt, majflt, cmajflt; string utime, stime, cutime, cstime, priority, nice, O, itrealvalue, starttime; // Read desired fields unsigned long vsize; long rss; stat_stream >> pid >> comm >> state >> ppid >> pgrp >> session >> tty_nr >> tpgid >> flags >> minflt >> cminflt >> majflt >> cmajflt >> utime >> stime >> cutime >> cstime >> priority >> nice >> O >> itrealvalue >> starttime >> vsize >> rss; // Ignore rest stat_stream.close(); // Convert values to KB long page_size_kb = sysconf(_SC_PAGE_SIZE) / 1024; vm_usage = vsize / 1024.0; resident_set = rss * page_size_kb; }
使用範例
要利用process_mem_usage() 函數顯示記憶體使用訊息,您可以編寫一個簡單的main函數如下:
int main() { using std::cout; using std::endl; double vm, rss; process_mem_usage(vm, rss); cout << "VM: " << vm << "; RSS: " << rss << endl; }
透過在程式執行過程中執行此程式碼,您可以取得執行時間的虛擬記憶體使用量 (VM) 和駐留集大小 (RSS)。
以上是如何可靠地取得 Linux 上的 C 運行時記憶體使用量?的詳細內容。更多資訊請關注PHP中文網其他相關文章!