int数组的最大大小?

时间:2012-09-19 04:15:22

标签: c++ c

  

可能重复:
  C programming, why does this large array declaration produce a segmentation fault?

我写了一个简单的程序。

#include <iostream>

using namespace std;

int main(int argc, char* argv[])
{
    int genotype[150000000];
}

但是我得到一个奇怪的错误:

  

RUN FAILED(退出值1,总时间:131ms)

如何保存这一数量的int

(我有足够的内存来保存这个int的数量,而我的计算机是64位的)

4 个答案:

答案 0 :(得分:5)

你的筹码太小了。使用new:

将它放在堆上
int* genotype = new int[150000000];

我希望以下内容有用。

  • 签名字符:-127到127(注意,不是-128到127;这适用于1-for-complement平台)
  • unsigned char:0到255
  • “plain”char:-127到127或0到255(取决于默认的char签名)
  • 签名短:-32767至32767
  • unsigned short:0到65535
  • signed int:-32767 to 32767
  • unsigned int:0到65535
  • 签署长:-2147483647至2147483647
  • unsigned long:0到4294967295
  • 签署长多头:-9223372036854775807至9223372036854775807
  • unsigned long long:0到18446744073709551615

或者您可以使用limit.h来了解您的程序所依赖的内容。 例如,您将找到int的最大范围:

C:

#include <limits.h>
const int min_int = INT_MIN;
const int max_int = INT_MAX;

C ++

#include <limits>
const int min_int = std::numeric_limits<int>::min();
const int max_int = std::numeric_limits<int>::max();

答案 1 :(得分:4)

作为链接器选项......

/STACK 601048576 //  150000000 * 4 (assume size of int), and 1Mb for general.

但是嘿.. 不要这样做。我甚至不确定会发生什么。

答案 2 :(得分:2)

您正在堆栈上分配它,这比堆或静态存储更有限。

对于C ++,std::vector是更好的选择。

#include <iostream>
#include <vector>

using namespace std;

int main(int argc, char* argv[])
{
    vector<int> genotype(150000000);
}

答案 3 :(得分:1)

如果你想使用动态内存,只需在这种情况下声明一个指向你想要分配的类型的指针int,并调用malloc()函数,其参数是你想要“数组”的字节数。在这种情况下,您需要获取单个整数的大小,并将其乘以您想要的大小(即单元格数):

确保释放任何内容,否则会导致内存泄漏。