由于我是C++的新手,我在处理我的学校作业方面遇到了麻烦。我以前从来没有提到过例外。
对于我的任务,我需要做的是创建一个异常机制来计算程序中可以分配多少内存( MB)。
我应该使用new[]
运算符和catch()
,并且仅限于使用一个变量。
我已经尝试了这些代码,这就是我到目前为止所得到的。我不知道我是否在正确的轨道上。任何建议都是值得感谢的。谢谢。
int main() {
char *mem;
unsigned long long count = 1;
while (1) {
mem = new char[1025 * 1054];
if (mem == NULL)
break;
free(mem);
count++;
}
std::cout << "count: " << count * 1024000;
}
发布于 2019-03-05 01:19:27
分配内存失败时,void* operator new ( std::size_t count );
将抛出异常std::bad_alloc
。
你所要做的就是创建一个函数allocate,它在失败时使用较小的内存来调用自身;例如,你可以这样做:
#include <iostream>
void allocate_me(size_t size)
{
try{
uint64_t* a = new uint64_t[size] ;
std::cout << "Size is : " << size << std::endl;
}
catch(std::bad_alloc &e)
{
allocate_me(size-1024);
}
}
int main()
{
size_t var = 1024*1024*1024;
allocate_me(var);
std::cout << "Hello, world!\n";
}
请注意,初始内存大小和减量取决于您的系统。
另一种解决方案是简单地查看可用的内存-在Linux中,您可以使用sysinfo
或查看文件/proc/meminfo
-并从这一点开始。
https://stackoverflow.com/questions/54988139
复制相似问题