c++ - 一个类对象可以容纳多大的属性?如何确定堆栈/堆限制?

标签 c++ memory new-operator limit

我有一个需要大量内存的类。

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>这放宽了对连续内存的限制,而无需删除几乎恒定的时间查找。

使用 vectordeque还可以缓解其他可能会在以后困扰您的项目的段错误问题。例如,在数组中越界。如果您转换为使用 vectordeque你可以使用 .at(x)成员函数来检索和设置集合中的值。如果您尝试越界写入,该函数将抛出错误。

关于c++ - 一个类对象可以容纳多大的属性?如何确定堆栈/堆限制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4106655/

相关文章:

c++ - 用括号括起来的逗号分隔值列表在 C 中是什么意思? a = (1, 2, 3);

ASP.Net Worker 进程内存配置文件工具

c++ - memmove、memcpy 和新的

c++ - 如何在 C++ 中将指向变量的指针声明为函数的参数?

ios - UIImage 内存未释放 VM : ImageIO_JPEG_DATA?

python - 有没有办法让我的 blit 在第一次迭代后重复自身?

c++ - 创建密码的 SHA-256 散列的 Botan 教程或示例

c++ - 在模板化结构范围内使用声明模板化

c++ - Qt 应用程序性能与 WinAPI/MFC/WTL/

windows - 大内存块分配和 4K block