测试系统堆内存

256 篇文章 3 订阅
149 篇文章 2 订阅

一 需求:

使用new操作测试程序最多可申请多大的堆内存

二 实现:

1.直接使用new

直接使用new可能会抛出bad_alloc异常,所以要使用try catch捕获

2.使用new(nothrow)

分配失败不会抛出异常,而是返回空指针

三 代码:

1.test.cpp

#include <stdint.h>
#include <iostream>
#include <string>
#include <vector>
#include <exception>
#include <new>
using namespace std;
static const uint64_t ONE_G = 1024 * 1024 * 1024;
bool test_system_stack_memory(size_t size) {
	char *p = nullptr;
	uint64_t capacity = ONE_G * size;
	bool succ = true;
	try {
		p = new char[capacity];
	}
	//catch (std::exception &e) {
	catch (std::bad_alloc &e) {
		succ = false;
		cerr << e.what() << endl;
		cerr << size << "G" << " alloc failed...!" << endl;
	}
	if (nullptr != p) {
		delete []p;
		p = nullptr;
	}
	return succ;
}
bool test_system_stack_memory1(size_t size) {
    uint64_t capacity = ONE_G * size;
    bool succ = true;
	char *p = new(nothrow) char[capacity];
    if (nullptr != p) {
        delete []p;
        p = nullptr;
    }
	else {
		succ = false;
		cerr << size << "G" << " alloc failed...!" << endl;
	}
    return succ;
}

int main() {
	for (size_t i = 0;i < 1000;i++) {
//		if (false == test_system_stack_memory(i)) {			// 0.004s
		if (false == test_system_stack_memory1(i)) {		// 0.004s
			return -1;
		}
	}

    return 0;
}

2.make.sh

g++ -std=c++17 -g -o Test test.cpp -pthread

3.使用valgrind检查内存

check.sh

valgrind --tool=memcheck --leak-check=full ./Test
valgrind --tool=cachegrind ./Test

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值