[英]How does initialization of local variables (large arrays) affect stack size?
我正在编写一个程序,必须在4GB RAM机器上制作几个10 ^ 6阶的大型整数数组。 尽管我选择使用malloc在堆上分配内存 。 但是在静态定义数组时,当按以下方式初始化数组时, 显然会出现预期的分段错误 ,而当我不初始化这些数组时,则不是。
#define LIMIT 1000000
#define MOD 1000000007
using namespace std;
void prime_seive(vector<int> &primes)
{
int i, j;
bool prime_no[LIMIT+1];
int m=sqrt(LIMIT);
// Something else
}
int main()
{
vector<int> primes;
prime_seive(primes);
int t;
scanf("%d", &t);
while(t--)
{
int n;
scanf("%d", &n);
int a[n+1];
for(int i=1;i<n+1;i++)
{
scanf("%d",&a[i]);
}
int fact_arr[LIMIT+1]={0}; // Segmentation fault when I initialize arrays
int part_arr[LIMIT+1]={0}; // Segmentation fault when I initialize arrays
}
return 0;
}
但是没有初始化
int fact_arr[LIMIT+1]; // NO Segmentation fault here.
int part_arr[LIMIT+1]; // NO Segmentation fault here.
我没有任何细分错误。
因此,出于好奇,我想了解一下在这里初始化数组有何不同?
编辑1:好的,所以我添加了cout<<fact_arr[0]<<fact_arr[1]<<endl;
最后,它确实为该数组的索引打印00。 因此,这显然是不初始化数组的危险手段。
当您尝试以没有权限的方式访问内存时,会导致分段错误。 如果没有数组初始化程序,则不会发生访问。 *
但是,该代码仍然很仓促。 例如,如果您之后立即调用函数, 则将导致堆栈访问。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.