2010-02-22 21 views
5

¿Cuáles son las ventajas de utilizar la asignación de memoria dinámica para crear una matriz en comparación con la asignación ordinaria de elementos en una matriz?Asignación de memoria dinámica

+3

¿Suena como tarea? –

+0

En algunas plataformas, el área de memoria dinámica es mucho mayor que el almacenamiento local (o automático). En términos comunes, el * heap * puede permitir un almacenamiento mayor que * stack * o * application local * storage. –

Respuesta

3

1) La asignación de memoria dinámica permite mucha libertad a la hora de gestionar el ciclo de vida de un objeto.

2) El tamaño de la matriz también se puede controlar con más libertad.

9

No tiene que saber el tamaño de la matriz por adelantado, ni asignar demasiada memoria para tener en cuenta matrices de gran tamaño. Esto permite que su programa sea más eficiente con su uso de memoria.

4

Las matrices creadas dinámicamente suelen ser más grandes que las creadas automáticamente, y pueden tener vidas más largas. Pero ambos tienen numerosas desventajas en comparación con el uso de std :: vector.

2

int x[100]; es de tamaño fijo y no se puede expandir. Su duración está ligada al contexto en el que se creó y no se puede pasar por diferentes funciones/métodos.

int *x = new int[n]; ... delete[] x; se puede reasignar para que pueda cambiar de tamaño y n no tenga que conocerse en el tiempo de compilación (para que pueda preguntar al usuario cuántos números necesita y crear una matriz de ese tamaño). Como señaló @Neil Butterworth, esto está creando una matriz en el montón y puede ser de mayor tamaño, mientras que la variante estática está creando una matriz en la pila.

std::vector envuelve mucho de este código de reasignación mágica y probablemente esto es algo que deberías usar en tu código.

0

Las ventajas básicas de una matriz dinámicamente asignada son que puede determinar el tamaño de una matriz dinámicamente asignada en tiempo de ejecución y, dado que la matriz está en la pila en lugar de la pila, puede ser mayor que una estática formación. Sin embargo, es importante recordar que std :: vector hace esto por ti. Las ocasiones en las que deberías rodar tu propia clase de matriz son pocas y distantes. Use std :: vector,

0

Cuando está asignando matrices, entonces el tamaño de la matriz debe darse en el momento de la compilación. En ese caso, la mayoría de las veces, ya sea que está asignando más memoria o menos memoria.

Aquí es donde la asignación de memoria dinámica lo ayuda a salir, de modo que puede asignar realmente solo los trozos de memoria que realmente se necesitan y, cuando haya terminado con la administración de memoria, puede liberar la memoria.

0

En pocas palabras, ayuda al programador a crear una matriz de tamaño que el usuario dice.

Cuestiones relacionadas