【发布时间】:2019-08-21 11:26:49
【问题描述】:
我正在学习 c++,其中一节课是关于异常处理的代码。该代码不是我的,它只是“try and catch”的示例。所以这个问题与代码质量无关
我对这段代码的问题实际上是:内存大小的输出和计算是否正确?
当我用new double(1000)分配一块内存时,大小不是8000字节吗?
cerr 输出仅计为 1kB 而不是 8kB。我错了吗?
我用sizeof(double) 得到了 1 double 的大小,以确认它是 8 个字节。
#include <iostream>
#include <cstdlib>
#include <new>
using namespace ::std;
int main()
{
int i = 0;
double *q;
try
{
while (1)
{
q = new double[1000];
i++;
}
}
catch (bad_alloc &ex)
{
cerr << "The memory is used up. " << i
<< " Kilobyte were available." << endl;
exit(1);
}
}
【问题讨论】:
-
new double(1000)创建单个double并将其初始化为1000。new double[1000]动态分配 1000 个双精度。double的大小通常为8,但可能具有不同的大小。无论哪种方式,您的代码在每次成功分配后都会增加i(将其增加一),因此对于每个成功分配的1000双倍,i的输出值将是1。
标签: c++ exception memory out-of-memory