2010-03-14 24 views
8

¿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

+3

Depende de lo que signifique "todo". – AraK

+1

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. –

+0

A diferencia de qué, ¿estás pensando? Variables globales, o datos en el montón? –

Respuesta

16

Es un mal estilo usar la asignación de montón si realmente no lo necesita. Especialmente en programas simples.

+2

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

+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

+0

Y no hay ningún montón en C. –

1

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).

+0

+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

0

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.

3

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.
+2

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

1

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.