Uri*_*nam 2 c++ memory arrays dynamic-arrays
我有这个项目,我正在努力.以下条件适用
我尝试使用普通的动态数组命令
int * p;
int i;
i=[size]; //This is calculated somewhere else.
p= new (nothrow) int[i];
Run Code Online (Sandbox Code Playgroud)
但据我所知,这个数组使得一个数组的最大大小可能是int的最大值.如果我更改我的代码并使用以下代码
long long * p;
long long i;
i=[size]; //This is calculated somewhere else.
p= new (nothrow) long long [i];
Run Code Online (Sandbox Code Playgroud)
然后,阵列中的每个单元格都是"long long"类型,这使得阵列非常重.有没有办法用long long来创建一个数组来确定数组中的单元格数,并且每个单元格的大小为int?
非常感谢,Uriel.
编辑:了解更多信息.
有没有办法用long long来创建一个数组来确定数组中的单元格数,并且每个单元格的大小为int?
没有理由数组的类型必须与用于指定大小的变量的类型相同.因此,请使用long long指定大小的变量,然后int使用数组的类型.
int * p;
long long i;
i=[size]; //This is calculated somewhere else.
p= new (nothrow) int [i];
Run Code Online (Sandbox Code Playgroud)
但是,当你说你需要创建一个"大到~7.13e + 17"的数组时,我很担心.我不知道你的意思是字节或元素,但对于直接数组而言,这两种方式都是非常巨大的.这已经进入了数PB的数据领域.
在32位程序中,这根本不可能.从理论上讲,你可以拥有一个高达几千兆字节的阵列(尽管实际上大多数情况下都是这样).
据我所知,在64位程序中,理论上你可以分配一个大的数组.但是,我怀疑大多数机器实际上可以处理它.由于此数据量将远远超过计算机中的RAM,因此操作系统将被迫将此阵列的大部分数据推送到页面文件中.但是,目前大多数典型计算机上的PB级页面文件远远超过了硬盘空间.
无论哪种方式,您可能需要认真考虑一种不同的方案,而不仅仅是一次分配整个大型数组.