声明一个非常大的整数向量?

Joh*_*ith 6 c++ vector

有没有办法在 C++ 中做到这一点而不会在运行时崩溃?

现在我宣布

vector<vector<int> > myvec(veclength);
Run Code Online (Sandbox Code Playgroud)

我怎样才能将 veclength 提高到它会(正确)的高度?即使在 10^7 时,当我应该有足够的计算机内存时它也会崩溃。

Kon*_*lph 4

这应该需要大约 250 MiB 的空间1(或更少,取决于体系结构),因此内存绝对不是\xe2\x80\x99t 这里的问题,也不应该max_size,这将是 10 17 (\xe2\x89 \x88 2 64 \xe2\x88\x95 8+8+8 )。

\n\n

我应该提到的是,我通过查看 GCC 的 libstdc++ 和 LLVM 的 libc++ 中的实现std::vector以及在实时系统上进行测试来证实了这些计算。计算值与实际实现 1:1 对应,并且 OP\xe2\x80\x99s 代码可以完美地与veclength = 10e7.

\n\n

因此,我得出的结论是,真正的原因在其他地方。

\n\n
\n\n

1)通过用三个 64 位整数来近似每个向量的大小来计算,分别表示开始指针、大小和容量,并假设空向量的默认容量为 0。实际实现可能有所不同,但可能相差不大。

\n