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


int array[ 256*256*256 ];

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

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

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2006/08/24 17:55:06
  • 終了:2006/08/24 19:18:31

ベストアンサー

id:zZiZz No.1

zZiZz回答回数4ベストアンサー獲得回数12006/08/24 18:59:09

ポイント35pt

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

id:hiyarihatto

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

解決しました(^^;

2006/08/24 19:14:11

その他の回答(1件)

id:zZiZz No.1

zZiZz回答回数4ベストアンサー獲得回数12006/08/24 18:59:09ここでベストアンサー

ポイント35pt

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

id:hiyarihatto

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

解決しました(^^;

2006/08/24 19:14:11
id:kurukuru-neko No.2

kurukuru-neko回答回数1844ベストアンサー獲得回数1552006/08/24 19:02:53

ポイント35pt

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

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

id:hiyarihatto

メモリの仕組み

勉強になりました☆

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

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

2006/08/24 19:17:40

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません