Linux(Ubuntu)下C++获取可用内存、当前最大内存等信息

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

你可能感兴趣的:(c++,linux,ubuntu,c++)