C++ 在C++;,在计算机集群上分配(和取消分配)超大阵列的最佳方法是什么?

C++ 在C++;,在计算机集群上分配(和取消分配)超大阵列的最佳方法是什么?,c++,arrays,allocation,C++,Arrays,Allocation,为什么下面的代码会产生错误,我如何修复它?我已经为此工作了2天,所以我将感谢任何建议。基本上,我不知道如何在一个节点上有200GB内存的计算机集群上分配和取消分配一个非常大的阵列。这方面的最佳实践是什么?谢谢大家! const unsigned long int array_size_1 = 4032758016; const unsigned long int array_size_2 = 2800526400; const unsigned long int array_size_3 = 2

为什么下面的代码会产生错误,我如何修复它?我已经为此工作了2天,所以我将感谢任何建议。基本上,我不知道如何在一个节点上有200GB内存的计算机集群上分配和取消分配一个非常大的阵列。这方面的最佳实践是什么?谢谢大家!

const unsigned long int array_size_1 = 4032758016;
const unsigned long int array_size_2 = 2800526400;
const unsigned long int array_size_3 = 2800526400;
complex<double>* kinetic;
complex<double>* potential;
lapack_complex_double* hamiltonian;

int main (int argc, char *argv[]) {


    kinetic = new complex<double>[4032758016];
    potential = new complex<double>[4032758016];
    hamiltonian = new lapack_complex_double[4032758016];

    delete[] kinetic;
    delete[] potential;
    delete[] hamiltonian;
}

我不相信你真的需要这种大小的连续数组。解决方案是
std::deque
:这看起来非常类似于
std::vector
,但元素存储在块中。随机访问是恒定的,
推回
甚至比向量的速度更快

此容器用于两个主要目的:当您需要两侧都有push/pop操作的队列时,以及用于存储非常大的缓冲区

代码如下所示:

#include <deque>

const unsigned long int array_size_1 = 4032758016;
const unsigned long int array_size_2 = 2800526400;
const unsigned long int array_size_3 = 2800526400;
std::deque<complex<double>> kinetic;
std::deque<complex<double>> potential;
std::deque<lapack_complex_double> hamiltonian;

int main (int argc, char *argv[]) {
    kinetic.resize(array_size_1);
    potential.resize(array_size_2);
    hamiltonian.resize(array_size_3);
}
#包括
常量无符号长整数数组\u size\u 1=4032758016;
常量无符号长整数数组\u size\u 2=2800526400;
常量无符号长整数数组\u size\u 3=2800526400;
std::deque动力学;
std::德克势;
德克哈密顿量;
int main(int argc,char*argv[]){
调整大小(数组大小1);
调整大小(数组大小2);
调整大小(数组大小3);
}
我认为您实际上不需要这种大小的连续数组。解决方案是
std::deque
:这看起来非常类似于
std::vector
,但元素存储在块中。随机访问是恒定的,
推回
甚至比向量的速度更快

此容器用于两个主要目的:当您需要两侧都有push/pop操作的队列时,以及用于存储非常大的缓冲区

代码如下所示:

#include <deque>

const unsigned long int array_size_1 = 4032758016;
const unsigned long int array_size_2 = 2800526400;
const unsigned long int array_size_3 = 2800526400;
std::deque<complex<double>> kinetic;
std::deque<complex<double>> potential;
std::deque<lapack_complex_double> hamiltonian;

int main (int argc, char *argv[]) {
    kinetic.resize(array_size_1);
    potential.resize(array_size_2);
    hamiltonian.resize(array_size_3);
}
#包括
常量无符号长整数数组\u size\u 1=4032758016;
常量无符号长整数数组\u size\u 2=2800526400;
常量无符号长整数数组\u size\u 3=2800526400;
std::deque动力学;
std::德克势;
德克哈密顿量;
int main(int argc,char*argv[]){
调整大小(数组大小1);
调整大小(数组大小2);
调整大小(数组大小3);
}

评论不用于扩展讨论;此对话已结束。评论不用于扩展讨论;这段对话已经结束。