繁体   English   中英

局部变量(大数组)的初始化如何影响堆栈大小?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM