在大多数系统上, Anint
的大小为 4 个字节。四个数组中的每一个都是 65000 个int
元素,因此使用65000 * sizeof(int) = 260000
字节。这四个数组总共使用了260000 * 4 = 1040000
堆栈空间的字节数。这非常接近许多链接器使用的 1MB 默认堆栈大小(您可以在项目配置中更改默认堆栈大小)。这就是为什么如果您尝试增加数组的大小会导致溢出 - 您确实超出了在链接时配置的堆栈大小。
如果要使用大量内存,请使用堆而不是堆栈:
#include <stdio.h>
#include <conio.h>
#define DATA_SIZE 65000
int main()
{
int *a = new int[DATA_SIZE];
int *b = new int[DATA_SIZE];
int *c = new int[DATA_SIZE];
int *d = new int[DATA_SIZE];
for(int i=0;i<DATA_SIZE;i++)
{
a[i]=i;
b[i]=i;
c[i]=i;
}
for(int j=0;j<DATA_SIZE;j++)
{
d[i]=a[i]+b[i]+c[i];
}
delete[] a;
delete[] b;
delete[] c;
delete[] d;
return 0;
}
然后可以将其更改为使用std::vector
该类为您管理堆内存:
#include <stdio.h>
#include <conio.h>
#include <vector>
#define DATA_SIZE 65000
int main()
{
std::vector<int> a(DATA_SIZE);
std::vector<int> b(DATA_SIZE);
std::vector<int> c(DATA_SIZE);
std::vector<int> d(DATA_SIZE);
for(int i=0;i<DATA_SIZE;i++)
{
a[i]=i;
b[i]=i;
c[i]=i;
}
for(int j=0;j<DATA_SIZE;j++)
{
d[i]=a[i]+b[i]+c[i];
}
return 0;
}