DOBON.NET DOBON.NETプログラミング掲示板過去ログ

C++での多次元配列について

環境/言語:[環境:Mac OS X  言語:C++]
分類:[.NET]

多次元配列についてなんですが、c++では次のような配列を用いることは無理なのでしょうか?cではできたんですが。
プログラム中で、
double hoge[20][20][20][20][20][20];
と記述し、
g++ sample.cpp -noprebind
とすると、
/var/tmp//ccVQ9NVX.s:108:Fixup of -376367284 too large for field width of 26 bits
/var/tmp//ccVQ9NVX.s:96:Fixup of -376367208 too large for field width of 26 bits
(以下省略)
というエラーメッセージが出ます。
何か良い方法はないでしょうか?よろしくお願いします。
  • 題名: Re[1]: C++での多次元配列について
  • 著者: とおりすがり
  • 日時: 2004/01/13 20:42:15
  • ID: 2139
  • この記事の返信元:
  • この記事への返信:
    • (なし)
  • ツリーを表示
C++もMacでのプログラミングも 余り詳しくないんですが

> double hoge[20][20][20][20][20][20];

静的な変数として宣言できるサイズを超えているだけではないでしょうか。
20の六乗は64000000ですが
double hoge[64000000];
としたらコンパイルできますか?

> too large for field width of 26 bits
このメッセージを見る限り恐らく 宣言可能な最大インデックスサイズは
67108864ではないでしょうか。

#あ 数字自体は 超えてないな ....

> cではできたんですが。
ただ単にコンパイラの制約が異なるだけでしょう。

64000000 * 8byte = 512メガくらいの メモリを使う計算ですが
通例 これほど大きなサイズの領域を利用するときは 静的変数ではなく
動的変数として宣言するのが定石では ないでしょうか。

また 環境によってはそれだけの領域を確保できずエラーとなる場合もありますので
そのあたりも考慮に入れてコーディングする必要があると思います。

では

DOBON.NET | プログラミング道 | プログラミング掲示板