Segun tengo entendido, las variables locales son memoria dinamica de por si... cuando sales de una funcion la memoria supuestamente se libera.
Digamos que si, las variables locales se gestionan desde el Stack, y son liberadas automaticamente al salir de la funcion, se dice automatica porque al regresar de la funcion o subrutina el Stack toma el valor siguiente a la funcion llamadora.
cosa que no ocurre con las variables globales, donde yo veo mas justificado el uso de malloc.
Exacto, el uso de malloc se aplica a variables globales que no necesitan tener tanta persistencia en el tiempo, es decir una variables que solo es utilizada por 2 o mas funciones, pero despues no se va a utilizar mas, su uso optimiza el uso de la RAM.
Nose, a lo mejor mi solucion no sea tan elegante pero no veo por qué no tenga que funcionar:
unsigned int * a_file_0[tamano*2];
unsigned int * a_file_1[tamano*4];
En ANSI C esto no se puede hacer, el tamaño del indice tiene que ser constante al momento de la compilacion, nose en C30, por otro lado hay que tener en cuenta el tamaño del Stack para asignar arrays de esta manera, sino un stack overflow puede producirse.
Saludos !