c ++最大数组大小

时间:2014-02-03 19:29:25

标签: c++ arrays

我想创建三个单列矩阵。这些是int [663],int [2470]和double [2470]。不幸的是,当我尝试打印所有这些矩阵时,C ++ Visual Studio不会打印整个结果。我认为它只打印矩阵的一小部分。我想知道数组是否在c ++ Visual Studio中达到了最大长度。或者还有其他原因吗?

#include <fstream>
#include <iostream>
using namespace std;

int main()
{
    ifstream inFile;
    int IRP_Row,A_Row,CIndx_Row;

    inFile.open("Data_662v2.dat");
    inFile >> IRP_Row >> CIndx_Row >>A_Row;



    int *IRP=new int[IRP_Row];
    int *CIndx=new int[CIndx_Row];
    double *A=new double[A_Row];
        for (int a = 0; a < IRP_Row; a++)

         inFile >> IRP[a] ;


    for (int b = 0; b < CIndx_Row; b++)

            inFile >> CIndx[b] ;

    for (int c = 0; c < A_Row; c++)

            inFile >> A[c] ;

    //print the IRP matrix
        for (int a = 0; a < IRP_Row; a++)

         cout<< IRP[a]<<endl ;

    system("pause");
    return 0;


}

3 个答案:

答案 0 :(得分:0)

  

我想知道数组是否在c ++ Visual Studio中达到了最大长度。

没有。你的阵列完全没有问题,实际上非常小。最大的是双阵列,仅为20KB。换句话说,它很小。

您的代码确实打印了程序创建的整个数组。你的代码很好。

你会发现问题比你想象的更平淡无奇。也许你正在读错文件。运行时数组大小的实际值是多少?也许文件格式不是你理解的那样。

底线是你的程序可以处理这个大小的数组(它们很小),你的代码成功读取值,并打印它读取的所有数据。


您的变量名称似乎选择不当。这看起来像CSC稀疏存储。您读取的前三个值是数组长度,但您将它们命名为行,这对我来说并不是很有意义。为什么有三个长度值而不是两个?当然列索引和值数组的长度是一样的吗?

答案 1 :(得分:0)

您始终可以使用std::numeric_limits<std::size_t>::max检查std::size_t的数字限制,但我非常怀疑您是否会溢出这么小的尺寸。

答案 2 :(得分:0)

数组大小的限制取决于您要编译的体系结构,操作系统以及PC上的可用RAM。通常,您不应分配比可用内存更多的内存。在32位Windows中,单个进程可以使用的最大内存量通常为2GB。在64位系统中,它还有很多。

32位架构上的整数需要4个字节。因此,可用于32位Windows上的整数数组的最大数组大小约为5亿,减去了程序其余部分占用的空间。还有许多其他系统和配置,其数量会更高。

相关问题