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
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值