в С99 можно память в стеке выделять
nb:[/home/dimka/tmp]$ > test.c #include <stdio.h>
long long factorial(int n) { int array[n]; for (int i=0; i<n; i++) array[i]=i+1;
long long result=1;
for (int i=0; i<n; i++) result*=array[i]; return result; }
int main(int argc, char **argv) { printf("factorial %d=%lld\n" "factorial %d=%lld\n", 10, factorial(10), 15, factorial(15)); } ^D nb:[/home/dimka/tmp]$ gcc -std=c99 test.c -o test nb:[/home/dimka/tmp]$ ./test factorial 10=3628800 factorial 15=1307674368000
кто-нибудь делал тесты насчет того насколько это эффективнее/неэффективнее malloc?