我可以在类C++中声明一个非常大的数组

Xuh*_*ang 3 c++ arrays class bigdata

我正在尝试编写一个类来存储数百万个3D坐标数据.首先,我尝试使用3D数组来存储这些坐标数据.

#ifndef DUMPDATA_H
#define DUMPDATA_H
#define ATOMNUMBER 2121160
#include <string>
using namespace std;
class DumpData
{
public:
    DumpData(string filename);
    double m_atomCoords[ATOMNUMBER][3];
};
#endif // DUMPDATA_H
Run Code Online (Sandbox Code Playgroud)

然后我编译了程序,但是当我在ubuntu 14.04系统(64位)中运行程序时,我得到了段错误.所以我通过声明将3D数组更改为矢量:

vector < vector <double> > m_atomCoords;
Run Code Online (Sandbox Code Playgroud)

然后程序工作.我只是想知道在类中声明非常大的数组有限制吗?

Bil*_*nch 6

通常,堆栈具有有限的大小.

这可能会导致堆栈溢出:

int main() {
    DumpData x;
}
Run Code Online (Sandbox Code Playgroud)

虽然这些不会:

int main() {
    static DumpData x;
    std::unique_ptr<DumpData> y = std::make_unique<DumpData>();
}
Run Code Online (Sandbox Code Playgroud)