Tengo una función que necesita bastante almacenamiento temporal interno para sus cálculos (algunas operaciones de matriz) y sé que esta función se llamará con frecuencia (por ejemplo, cada milisegundo a lo largo del tiempo de ejecución del programa). Mi instinto me dice que es mejor declarar esas variables temporales estáticas, por lo que no hay tanto esfuerzo administrativo para crearlas una y otra vez con cada llamada de la función. Tengo que inicializarlos de todos modos cada vez que se llama a la función, por lo que mantenerlos vivos no es necesaria para fines funcionales. Soy consciente de que convertirlos en estáticos rompe la seguridad del hilo, pero esto no es un problema aquí.¿Usar variables estáticas internas para aumentar el rendimiento?
Como el conocimiento es mejor que cualquier sensación visceral, me gustaría saber cuál es la forma "correcta" de manejar este caso.
void frequentlyCalledFunction(void)
{
double matrix1[10][10];
double matrix2[10][10];
/* do something with the matrices ... */
}
o
void frequentlyCalledFunction(void)
{
static double matrix1[10][10];
static double matrix2[10][10];
/* do something with the matrices ... */
}
Puede que no exista una sobrecarga para crear las variables locales, pero tendrán que accederse en relación con la pila o el puntero base, por lo que podría haber un rendimiento mensurable – Christoph
@Christoph: punto interesante. Me pregunto si hace una diferencia en un procesador moderno. Apuesto a que no, pero no soy un asistente de montaje. :-) – RichieHindle
Estoy tratando de pensar en una plataforma en la que esto sea un problema. Dado que se fijará desde el marco de pila dado, no debería causar un problema. Por ejemplo, en mips podrías hacer un LD r1, frame_offset (stack_frame_base) para que fuera gratis. mov eax, [esp + frame_offset] es gratuito, así ... – Goz