2012-05-24 22 views
18

Se puede declarar una matriz muy simple con 10 elementos y el uso de esa manera:¿Cuál es la cantidad máxima de dimensiones permitidas para una matriz en C++?

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

o declarar una matriz 2D con 10x100 como elementos int myArray[10][100];

incluso crear más complicados arreglos en 3-D con int myArray[30][50][70];

incluso puedo ir tan lejos como la escritura:

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]; 

Así, ¿cuál es la cantidad máxima de dimensiones que puede usar al declarar una matriz?

+16

Es una, obviamente. –

+6

En realidad, su segundo ejemplo tiene un desbordamiento de búfer en él. Whoops. – Puppy

+7

¿Por qué algunos votos negativos? No es una pregunta mala o incorrecta. – Puppy

Respuesta

27

El estándar recomienda las implementaciones para aceptar al menos 256 (ISO 14882, B.2), pero que puede soportar menos o más:

Los límites pueden limitar las cantidades que incluyen los descritos a continuación o los demás . El número entre corchetes siguiendo cada cantidad se recomienda como el mínimo para esa cantidad. Sin embargo, estas cantidades son solo directrices y no determinan el cumplimiento.

[...]

- Puntero, declaradores array, y función (en cualquier combinación) modificar una aritmética, estructura, unión, o tipo incompleto en una declaración [256].

Pasa lo mismo tanto en C++ 03 como en C++ 11.

-3

El único límite que tiene cuando escribe matrices es la capacidad de memoria de su computadora.

+3

Incorrecto: no es un límite. Gracias a la memoria virtual y la paginación, un proceso puede abordar más datos de los que el sistema tiene memoria física (aunque lentamente). Por otro lado, debido a la fragmentación de la memoria, la matriz más grande que puede asignar un proceso puede ser significativamente más pequeña que su espacio de direcciones. –

4

Mi primera publicación!

Por lo que vale, el límite en mi sistema es de solo 30 dimensiones cuando se asigna estáticamente y 19 dimensiones cuando se asignan en la pila. El sistema es AMD A10-7700K, 64 bits (8 GB RAM). Compilado en Visual C++ 2013 con configuraciones predeterminadas.

Tenga en cuenta que para determinar el máximo en su sistema, utilice el tipo de datos más pequeño (char) con el tamaño de dimensión más pequeño (2). No hay límite cuando la dimensión es 1 ya que una dimensión de 1 (en cualquier dimensión) es redundante y no afecta el tamaño general de la matriz. Es lógico que cuanto mayor sea el tipo de datos o mayor sea el tamaño de una dimensión, menos dimensiones tendrá. Sin embargo, he encontrado que cualquiera (y solo una) dimensión puede ser 3, pero no 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

Una dimensión de 1 no es redundante, ya que 'T' y' T [1] 'tienen una semántica diferente. – Hurkyl

+0

La semántica es diferente pero el consumo de memoria no. Pero, ¿hay algún uso práctico para una dimensión de 1? –

Cuestiones relacionadas