2017-10-23 3 views
0

私はこのコードを実行すると、私はこれに変更されたとき、それはインサイド機能のメモリ制限は

main(){ 
    long a[1000][1000]; 
} 

を壊したが、

long a[1000][1000]; 
main(){} 

それがうまく動作します。

私はメモリ内の関数内の変数があると仮定しましたが、そうですか?

もしそうなら、それらのメモリ制限(バイト単位)はどのくらいですか?

+1

スタックはサイズに制限があり、OSやコンパイラによって異なります。それで最初のスニペットが壊れた理由 – Amadeus

+0

役に立つ読書:http://ja.cppreference.com/w/cpp/language/storage_duration。特に、Automatic Storage Location(ほとんどの "内部関数変数"とも呼ばれます)の部分です。 – user4581301

答えて

1

正確な制限は、コンパイラおよびプラットフォームによって異なります。

2つのスニペットの違いは、最初の例ではstackからメモリを割り当て、2番目のプログラムではstatically - プログラムが起動する前に割り当てます。スタックは一般に小さい。