整数数组的最大大小

Maximum size of int array?

本文关键字:数组 整数      更新时间:2023-10-16

可能的重复项:
C编程,为什么这个大数组声明会产生分段错误?

我写了一个简单的程序。

#include <iostream>
using namespace std;
int main(int argc, char* argv[])
{
    int genotype[150000000];
}

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

运行失败(退出值 1,总时间:131 毫秒)

如何保存此数量的int

(我有足够的内存来保存这个数量的 int s,我的电脑是 64 位的)

您的堆栈太小。把它放在堆上,使用 new:

int* genotype = new int[150000000];

我希望以下内容会有所帮助。

  • 符号字符:-127 到 127(注意,不是 -128 到 127;这可容纳 1 的补码平台)
  • 无符号字符:0 到 255
  • "纯"字符:-127 到 127 或 0 到 255(取决于默认字符符号)
  • 签名短:-32767 到 32767
  • 无符号短:0 到 65535
  • 签名 int: -32767
  • 到 32767
  • 无符号整数:0 到 65535
  • 签名长:-2147483647 到 2147483647
  • 无符号长整型:0 到 4294967295
  • 签名长长:-9223372036854775807 to 9223372036854775807
  • 无符号长长:0 到 18446744073709551615

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

三:

#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();

作为链接器选项...

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

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

您将此值分配给堆栈,这比堆或静态存储更受限制。

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

#include <iostream>
#include <vector>
using namespace std;
int main(int argc, char* argv[])
{
    vector<int> genotype(150000000);
}

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

确保释放任何错误分配的内容,否则会出现内存泄漏。