我有一个需要大量内存的类。
class BigClass {
public:
BigClass() {
bf1[96000000-1] = 1;
}
double bf1[96000000];
};
我只能通过在堆内存中“新建”一个对象来启动类。
BigClass *c = new BigClass();
assert( c->bf1[96000000-1] == 1 );
delete c;
如果我在没有"new"的情况下启动它。我将在运行时遇到段错误。
BigClass c; // SIGSEGV!
如何确定内存限制?还是我最好始终使用"new"?
最佳答案
首先,既然您已授权此 C++ 而不是 C,您为什么要使用数组?相反,我可以建议 vector<double>
或者,如果连续内存导致问题 deque<double>
这放宽了对连续内存的限制,而无需删除几乎恒定的时间查找。
使用 vector
或 deque
还可以缓解其他可能会在以后困扰您的项目的段错误问题。例如,在数组中越界。如果您转换为使用 vector
或 deque
你可以使用 .at(x)
成员函数来检索和设置集合中的值。如果您尝试越界写入,该函数将抛出错误。
关于c++ - 一个类对象可以容纳多大的属性?如何确定堆栈/堆限制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4106655/