2012-05-24 2 views
18

あなたがそのように10の要素と非常に単純な配列を宣言し、それを使用することができます。C++で配列に許されるディメンションの最大数はいくらですか?

int myArray[10]; 
myArray[4] = 3; 
std::cout << myArray[4]; 

それともint myArray[10][100];

として10x100要素を持つ2次元配列がさえint myArray[30][50][70];

と、より複雑な3次元配列を作成します宣言

私も執筆限り行くことができます:

int complexArray[4][10][8][11][20][3]; 
complexArray[3][9][5][10][15][3] = 5; 
std::cout << complexArray[3][9][5][10][15][3]; 

ので、配列を宣言するときに使用できるディメンションの最大数はいくらですか?

+16

これは明らかです。 –

+6

実際に、2番目の例では、バッファオーバーランが発生しています。うわー。 – Puppy

+7

なぜいくつかのナブdownvote?それは悪い、または間違った質問ではありません。 – Puppy

答えて

27

標準は、少なくとも256(ISO 14882、B.2)を受け入れるように実装することをお勧めしますが、それらはより少ない以上をサポートすることができる:

限界以下に記載されるもの等が挙げられる量を制限することができます。その量の最小値として各量に続く括弧内の数字 が推奨されます。ただし、これらの数値は のガイドラインのみであり、準拠性は判断されません。

[...]

- ポインタ、配列、および関数宣言子(任意の組み合わせで)宣言[256]における演算、構造、共用体、または不完全型を変更します。

C++ 03とC++ 11の両方で同じです。

-3

アレイを作成する際の唯一の制限は、コンピュータのメモリ容量です。

+3

正しくない - 実際には制限ではありません。仮想メモリとページングのおかげで、プロセスは実際にはシステムが物理メモリを持つよりも多くのデータを扱うことができます(ただし、ゆっくりです)。一方、メモリの断片化のために、プロセスが割り当てることができる最大の配列は、そのアドレス空間よりもかなり小さくなる可能性があります。 –

4

私の最初の投稿!

私のシステムの制限は、静的に割り当てられた場合は30次元、スタックに割り当てられた場合は19次元です。システムはAMD A10-7700K、64ビット(8 GB RAM)です。既定の設定でVisual C++ 2013でコンパイルされます。

システムの最大値を決定するには、最小の寸法サイズ(2)の最小データ型(char)を使用してください。 1のディメンションは冗長であり、配列の全体的なサイズに影響しないため、ディメンションが1の場合は制限がありません。データ型が大きいほど、またはディメンションのサイズが大きくなればなるほど、ディメンションが少なくなるという理由があります。しかし、私は、いずれか1つ(唯一の)次元が3であっても3ではないことがわかりました。

#include<iostream> 
int main() 
{ 
    char a[2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2] = {0}; // ok 
    char b[2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2] = {0}; // fail! 
    static char c[2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2] = {0}; // ok 
    static char d[2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2][2] = {0}; // fail! 

} 
+1

'T'と 'T [1] 'のセマンティクスが異なるため、次元1は冗長ではありません。 – Hurkyl

+0

セマンティクスは異なりますが、メモリ消費はありません。しかし、1の次元に実用的な用途はありますか? –

関連する問題