人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

C言語のINT型の配列の要素数の最大っていくつですか?

int array[ 256*256*256 ];

というプログラムを書いたら、エラーになります。
256*256*256の配列を用意したいのですが、
どうかけばいいのでしょうかね?

教えてください。
お願いしますm(_ _)m

●質問者: hiyarihatto
●カテゴリ:コンピュータ 学習・教育
✍キーワード:C言語 エラー プログラム 素数 配列
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● zZiZz
●35ポイント ベストアンサー

int array[ 256*256*256 ];

は大きすぎて、スタックに載らなかったのではないでしょうか。

動的に領域確保したらよいと思います。

malloc() で確保して、

int *array;

array = malloc(256*256*256);

if(array == 0) {

fprintf(stderr, "メモリ確保エラー\n");

exit(1);

}

使い終わったら free() で解放。

free(array);

ダミー

http://q.hatena.ne.jp/1156409704

◎質問者からの返答

ありがとうございました。

解決しました(^^;


2 ● kurukuru-neko
●35ポイント

論理的限界はありませんが、物理的限界があります。

1. 自動変数(auto)の場合、スタック領域に通常

領域が取られます。

通常は、数M程度の領域です。

利用しているコンパイラのオプションにより変更

が可能な場合が多い

2.静的変数・広域(static/global)の場合、

データ領域に通常領域が取られます。

3. 通常は、数+M程度の領域です。

利用しているコンパイラのオプションにより変更

が可能な場合が多い

動的の場合、メモリーを動的に割り当てる

方法により取得します。

基本的には、OSの割り当ての制限です。

数+M?数百M程度の領域です。

OSのメモリーの上限設定に依存する場合が多い。

32bit CPUのばあいint = 4byte

256*256*256*4 = 64Mbyteになります。

用途によりますが

static int array[ 256*256*256 ];

とか

int *array ;

array = (int *)malloc( 256 * 256 * 256 * sizeof(int ));

mallocで確保した領域は freeで開放する必要がある。

DMY:http://www.yahoo.co.jp

◎質問者からの返答

メモリの仕組み

勉強になりました☆

物理的限界が理由だったみたいですね。

ありがとうございますm(_ _)m

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ