Supongamos que la funciónLa función necesita su propia matriz para el espacio de trabajo: ¿mejores prácticas?
void foo(int n, double x[])
tipo n-vector x
, hace algunas operaciones en x
, y luego se restaura el orden original de x
antes de regresar. Así internamente, foo
necesita un poco de almacenamiento temporal, por ejemplo, al menos un n-vector de enteros para que se guarde el orden original.
Cuál es la mejor manera de manejar esto de almacenamiento temporal? Se me ocurren dos enfoques obvios:
foo declara su propio espacio de trabajo al declarar una matriz interna, es decir, en la parte superior de
foo
tenemosint temp[n];
en la rutina principal vocación, dinámicamente asignar el n-vector de enteros de una vez y pasar en el almacenamiento a cada llamada a una versión de
foo
que acepta el almacenamiento temporal como una tercera arg, es decir,double *temp = malloc(n*sizeof(double)); foo(n, x, temp);
Me preocupa que la opción 1 es ineficiente (la función foo
se llamará muchos veces con el mismo n
), y la opción 2 es simplemente feo, ya que tengo que llevar este almacenamiento temporal para que sea siempre disponible donde sea que necesite una llamada al foo(n,x)
.
¿Hay otras opciones más elegantes?
+1. Por cierto, si el almacenamiento es 'n'-specific, el' int n' podría incluirse en el contexto, para acortar ligeramente la lista de argumentos a 'foo()'. –