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
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.
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"
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]);
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.
Totally @ su segundo párrafo. (Aunque, por razones similares, no sé por qué alguien todavía estaría usando Windows Vista;) – Artelius
- 1. Descripción de asignación de memoria, programa de prueba fallando
- 2. cómo aumentar la memoria en heroku?
- 3. Asignación de memoria de Android
- 4. asignación dinámica de la memoria
- 5. aumentar la memoria asignada a la aplicación
- 6. cómo aumentar la memoria del montón de Java permanentemente?
- 7. Asignación de memoria dinámica
- 8. 64bit Asignación de memoria
- 9. Asignación dinámica de memoria pregunta
- 10. Java Memoria Asignación Fugas
- 11. Confundido sobre la asignación de memoria
- 12. de asignación de memoria Problema
- 13. ¿Cómo aumentar la memoria RAM para el clúster en couchbase?
- 14. asignación de memoria para el puntero
- 15. asignación de memoria en C++
- 16. Memoria de asignación dinámica en la GPU
- 17. Comprobando la asignación de memoria en Instrumentos
- 18. Uso de la asignación de memoria dinámica para matrices
- 19. Asignación de memoria en C
- 20. C# Pregunta asignación/desasignación de memoria con respecto al alcance
- 21. Sugerencia de asignación de memoria
- 22. Asignación de memoria en C++
- 23. ¿Cómo funciona C++/Qt - La asignación de memoria?
- 24. ¿Cómo funciona realmente la asignación automática de memoria en C++?
- 25. ¿Cómo manejan las máquinas virtuales modernas la asignación de memoria?
- 26. Preguntas sobre la asignación de memoria de Windows
- 27. CUDA: ¿El acceso global a la memoria global es más rápido que la memoria compartida? Además, ¿la asignación de una gran matriz de memoria compartida ralentiza el programa?
- 28. ¿Debería aumentar el uso de la memoria al usar ElementTree.iterparse() when clear() ing trees?
- 29. Asignación de memoria de objeto Delphi
- 30. Alineación de asignación de memoria Java
O un 'std :: vector (300 * 300 * 4)', o un 'boost :: array , 300>, 4>' para sugerir algunos C++ soluciones. –
MSalters