2012-05-24 2 views
18

10 개 개의 요소를 매우 간단한 배열을 선언하고 그런 식으로 사용할 수 있습니다C++에서 배열에 허용되는 최대 차원 수는 얼마입니까?

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

또는 int myArray[30][50][70];

int myArray[10][100];

도 만들 더 복잡한 3 차원 배열로 10x100 요소와 2 차원 배열을 선언

심지어 쓰는만큼 멀리 갈 수

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

실제로 두 번째 예제에는 버퍼 오버런이 있습니다. 오케이. – Puppy

+7

왜 일부 누드 다운 vote? 그것은 나쁘거나 잘못된 질문이 아닙니다. – Puppy

답변

27

기준은 적어도 256 (ISO 14882, B.2)을 허용하도록 구현 권장 있지만 지원할 수 적은 이상 :

한계 이하 또는 다른 기술들을 포함하는 양을 제한 할 수있다 . 각 수량 다음에 대괄호로 묶인 숫자 이 해당 수량의 최소값으로 권장됩니다. 그러나이 수량은 이며 지침을 준수하는지 여부는 결정하지 않습니다.

[...]

- 포인터 배열 및 기능 (임의의 조합) 선언자 선언 [256]의 연산 구조, 조합, 또는 불완전 형 수정.

C++ 03 및 C++ 11 모두 동일합니다.

-3

배열을 작성할 때 유일한 제한은 컴퓨터의 메모리 용량입니다.

+3

잘못되었습니다. 실제로는 제한이 아닙니다. 가상 메모리 및 페이징 덕분에 프로세스는 실제로 시스템이 실제 메모리를 가졌을 때보 다 더 많은 데이터를 처리 할 수 ​​있습니다 (느리지 만). 반면에 메모리 조각화로 인해 프로세스가 할당 할 수있는 가장 큰 배열은 주소 공간보다 훨씬 작습니다. –

4

내 첫 번째 게시물!

내 시스템의 한계는 정적으로 할당되면 30 개의 치수가되고 스택에 할당되면 19 개의 치수가됩니다. 시스템은 AMD A10-7700K, 64 비트 (8GB RAM)입니다. Visual C++ 2013에서 기본 설정으로 컴파일됩니다.

시스템의 최대 값을 결정하려면 최소 치수 크기 (2)로 최소 데이터 유형 (char)을 사용하십시오. 치수가 1 인 경우 치수가 1이면 치수에 제한이 없으며 배열의 전체 크기에는 영향을 미치지 않으므로 제한이 없습니다. 데이터 유형이 커지거나 차원의 크기가 커지면 가질 수있는 차원이 줄어들게됩니다. 그러나 어느 하나의 차원이 3이 될 수 있지만 4는 아님을 발견했습니다.

#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의 차원에 대해 실용적인 용도가 있습니까? –

관련 문제