¿Es malo diseñar sus programas C sencillos para asignar todo o la mayoría de las cosas en la pila?Asignación de pila en C
Respuesta
Es un mal estilo usar la asignación de montón si realmente no lo necesita. Especialmente en programas simples.
Tendría más de +1 si pudiera. La asignación de pila es segura, evita fugas de memoria y evita problemas de puntero nulo o de basura. Úselo siempre que sea posible. – kyoryu
+1 - Absolutamente: el montón es una estructura de datos más compleja que la pila, y no solo una sobrecarga innecesaria en muchos casos, sino también una causa de complejidad innecesaria con posibles problemas como punteros colgantes, pérdidas de memoria, corrupción de montón, etc. No hay razón para evitar el montón cuando sea necesario, pero sin duda es una opción "cuando sea necesario", no la opción predeterminada sensata. – Steve314
Y no hay ningún montón en C. –
Si ponemos énfasis en los programas SIMPLE, como dijiste, entonces no, no está tan mal :) También puedes echarle un vistazo a los arreglos de longitud variable C99 (aquí hay un ejemplo simple: http://en.wikipedia.org/wiki/Variable-length_array).
+1 Por mencionar los VLA. Los usé en un proyecto pequeño, y me ayudaron a evitar la asignación de montón la mayor parte del tiempo. – helpermethod
No. A menos que tenga variables que tengan un tamaño no fijo. Tal código podría dejar un desbordamiento de pila bastante rápido.
Las asignaciones de pila son más baratas que las asignaciones de pila. La asignación y la desasignación de la pila son simples incrementos y decrementos del contador en la entrada/salida de la función (o para ser más exactos: alcance). Las asignaciones de Heap significan encontrar un bloque de memoria lo suficientemente grande en un espacio de direcciones posiblemente fragmentado. Debido a eso, las asignaciones de pila casi siempre son preferibles.
Las principales razones para no usar la pila son:
- El tamaño necesario no se conoce hasta tiempo de ejecución.
- Se necesita mucha memoria (megabytes); que puede causar problemas en sistemas donde los tamaños de pila normalmente están limitados a números de dos dígitos de Megabytes.
O si se necesita mucha memoria (Kilobytes); lo que puede causar problemas en sistemas donde los tamaños de pila normalmente están limitados a dos dígitos de Kilobytes (como controladores de dispositivos en PC o cualquier programa en la mayoría de los sistemas integrados). – Dipstick
La principal ventaja del montón es que puede asignar dinámicamente en él. Si no conoce el tamaño de la variable que necesita: apilarla.
Si su programa es simple, es posible que no necesite asignar una variable en el montón; pero la elección no depende de la complejidad del programa, depende de la necesidad que tengas de la variable. Si necesita acceder/modificar la variable a lo largo de su flujo de trabajo, a través de varias funciones, entonces es mejor en el montón. Lo liberarás cuando ya no lo necesites más. Si la variable es solo una estructura de opciones o un contador, la pila es perfecta para ello.
- 1. C++ asignación en la pila actuando curiosamente
- 2. Valgrind dice "asignación de pila", digo "asignación de pila"
- 3. Asignación de pila, relleno y alineación
- 4. Asignación de memoria en C++
- 5. PIMPL y la asignación de la pila
- 6. Orden de asignación de variables locales en la pila
- 7. enumeraciones en C# - asignación
- 8. Asignación paralela en C++
- 9. pila de espagueti en C
- 10. Asignación estática en java - montón, pila y generación permanente
- 11. asignación de memoria en C++
- 12. Asignación de memoria en C
- 13. montón vs segmento de datos vs asignación de pila
- 14. Asignación de memoria del montón y pila de Java
- 15. Destino de asignación de std :: aligned_storage (¿pila o montón?)
- 16. Explotación de desbordamiento de pila en C
- 17. C++ desbordamiento de pila
- 18. Uso adecuado de pila y pila en C++?
- 19. C++ asignación de puntero
- 20. ¡La asignación de la pila falla y la asignación del montón tiene éxito! ¿Es posible?
- 21. memcpy vs asignación en C
- 22. Asignación vs Inicialización en C++
- 23. Operador de asignación de sobrecarga en C++
- 24. Perfilado de asignación de memoria en C++
- 25. C# clonar una pila
- 26. Asignación de clase estática
- 27. C++: Almacenamiento de estructuras en una pila
- 28. Pila excepción de desbordamiento en C# colocador
- 29. Asignación de texturas C++ OpenGL
- 30. Asignación de matriz C++ error: asignación de matriz no válida
Depende de lo que signifique "todo". – AraK
Si vas a hacer todo con los locales y los parámetros, ¿por qué estás usando C en primer lugar? Use un lenguaje funcional como ML, Haskell, Erlang, etc. en su lugar. –
A diferencia de qué, ¿estás pensando? Variables globales, o datos en el montón? –