C言語配列のオーバーフローについてオープンに大きな疑問

C言語では、メモリは5つのゾーンに分けることができ占有しました:

           ①コード領域(テキストセグメント):理解しやすいが、バイナリマシンコードの後に​​コンパイルされたコードを配置することです。

           ②ヒープ(ヒープ):動的なメモリ割り当てのために使用されます。プログラマが解放しない場合は、プログラマによって一般割り当てと解放は、プログラムの終了により、オペレーティングシステムを復元することが可能です。(実際には、のmalloc()関数は、メモリ領域を制御することができます)

           ③スタック領域(スタック):自動的にコンパイラおよび放出することによって、割り当てられたが、一般的にローカル変数、関数のパラメータを格納するために使用される(焦点は黒板をノック描きます!)。

           ④グローバル初期化データ領域/スタティックデータ領域(データ・セグメント):名前が示すように、グローバル変数や静的変数を格納する場所です。この領域は、プロセス全体で共有されています。

           ⑤未初期化データ領域(BSS):実行時に変更。それがグローバル変数またはローカル変数に基づいて値(初期化)を変更し、彼らが地域に入ります。それ以外の場合は、群衆をmadding BSS内に滞在していきます。(少し後、私たちはその存在と経験を証明するための実験を使用します。)

 

Windowsでは、許可された空間データ・セグメントは、コンピュータのメモリならば、残り8G、2次元配列のint型でも46340 * 46340のサイズに開くことができるされ、残りのメモリのサイズによって異なります。

      

宇宙スタックのみ2M!すなわち* 1024年2 * 1024 = 2097152バイト、最大でもローカル変数空間が手放す524288 int型を

 

しかし、私はローカルに行う方法の大規模な配列を開くようにしたいですか?非常に単純な、それはデータセグメントに入ります。

書式#include <iostreamの>
 使用して 名前空間はstdを、
int型のmain()
{ 
    静的 int型 DIS [ 8000 ] [ 8000 ]。
    // 代码 
}

 

参考:  https://blog.csdn.net/qq_21882325/article/details/65445810

 

 

おすすめ

転載: www.cnblogs.com/kazama/p/11917023.html