2010-06-12 16 views
5

Cuando intento inicializar una matriz 3D de tamaño 300 * 300 * 4 en un programa C, mi programa deja de funcionar e informa de un error de desbordamiento de la pila. El sistema que estoy usando tiene 3GB de RAM, lo cual debería ser suficiente. ¿Hay alguna manera de aumentar la memoria asignada a un programa? Estoy usando Dev C++ en Windows Vista.Cómo aumentar la asignación de memoria al programa

Respuesta

11

utilizar cualquiera malloc()/free() (o new[]/delete[] para C++), o una matriz global, o una matriz estática local. Si intenta crear una matriz no estática dentro de una función, se asigna en la pila y las pilas generalmente no son muy grandes.

También puede intentar inicializar la matriz al revés; algunos sistemas operativos hacen crecer la pila de forma dinámica a medida que ocurren fallas en las páginas, y dado que en x86 la pila crece numéricamente hacia abajo, la inicialización hacia atrás puede ayudar.

+1

O un 'std :: vector (300 * 300 * 4)', o un 'boost :: array , 300>, 4>' para sugerir algunos C++ soluciones. – MSalters

3

Necesita aumentar la cantidad de espacio de pila que su programa puede usar.

Puede establecer el tamaño máximo de pila en el diálogo bajo a las propiedades "Enlazador | Sistema | Pila Reserva Tamaño"

2

Incluso si usted tiene 3 GB de RAM, el tamaño de la pila está limitado por el sistema operativo y es típicamente pequeño, ya que estructuras grandes como esta probablemente se asignan en el montón, no en la pila.

Dado que está utilizando C++, maybe you could use Boost?

boost::multi_array<int, 3> x (boost::extents[300][300][4]); 
2

Como está utilizando DevC++, es de suponer que está utilizando el compilador gcc y a través de ella el enlazador ld. El enlazador tiene una opción -stack stacksize que le permite controlar la cantidad de memoria asignada a la pila. ¿Cómo harías para hacer esto desde DevC++? No lo sé.

Tampoco sé por qué alguien usaría DevC++ en absoluto: tiene errores y ya no se está desarrollando. Deberías considerar cambiar a un IDE mejor: Code::Blocks acaba de tener una nueva versión principal, es superior a DevC++ en todos los aspectos, y viene con un compilador de C++ mucho más moderno.

+1

Totally @ su segundo párrafo. (Aunque, por razones similares, no sé por qué alguien todavía estaría usando Windows Vista;) – Artelius

Cuestiones relacionadas