Linux(Ubuntu)下C++获取可用内存、当前最大内存等信息
使用sysconf函数获取当前可用内存大小
例程:
/// @brief Get the available memory in MB
/// @return
unsigned long long getAvailableMemory()
{
long long pages = sysconf(_SC_AVPHYS_PAGES);
long long page_size = sysconf(_SC_PAGE_SIZE) / 1024.0;// 以KB为单位
return pages * page_size;
}
使用getrusage获取程序运行中消耗的内存大小
进程资源统计函数getrusage
相当于WIN32 API中的GetProcessMemoryInfo
,可以获取当前进程的内存资源信息。获取程序运行消耗的内存原理是:在运行关键算法前获取当前进程使用的最大内存,算法结束后再次获取当前进程使用的最大内存,相减就得到关键算法所消耗的内存。
例程如下:
// Initial state record.
#ifndef __linux__
HANDLE hCurProcess = GetCurrentProcess();
_PROCESS_MEMORY_COUNTERS pms1, pms2;
GetProcessMemoryInfo(hCurProcess, &pms1, sizeof(_PROCESS_MEMORY_COUNTERS));
#else
rusage rs1;
getrusage(RUSAGE_SELF, &rs1);
#endif
/ Run some algorithms here.
#ifndef __linux__
// Windows Platform
hCurProcess = GetCurrentProcess();
GetProcessMemoryInfo(hCurProcess, &pms2, sizeof(_PROCESS_MEMORY_COUNTERS));
clock_t t2 = clock();
cprintf("时间消耗: %.1lf\n", (t2 - t1) / 1000.0);
cprintf("内存消耗: %.1lf MB\n", (pms2.PeakWorkingSetSize - pms1.PeakWorkingSetSize) / (1024.0*1024.0));
#else
// Linux Platform
rusage rs2;
getrusage(RUSAGE_SELF, &rs2);
clock_t t2 = clock();
cprintf("时间消耗: %.1lf\n", (t2 - t1) / 1000.0);
cprintf("内存消耗: %.1lf MB\n", (rs2.ru_maxrss - rs1.ru_maxrss) /1024.0);// .ru_maxrss
#endif