?
Ich hab das mal ausprobiert:
#include <stdio.h>
#include <time.h>
__inline__ void test_fixed() {
int foo[256];
}
__inline__ void test_vla() {
int n = 256;
int foo[n];
}
int main(void) {
clock_t b, m, e;
int i;
b = clock();
for(i = 0; i < 100000000; ++i) { test_fixed(); }
m = clock();
for(i = 0; i < 100000000; ++i) { test_vla(); }
e = clock();
printf("%lf - %lf\n",
(double)(m - b) / CLOCKS_PER_SEC,
(double)(e - m) / CLOCKS_PER_SEC);
return 0;
}
$ gcc test.c && ./a.out
0.300000 - 0.520000
$ gcc -O1 test.c && ./a.out
0.040000 - 0.260000
$ gcc -O2 test.c && ./a.out
0.000000 - 0.220000
$ gcc -O3 test.c && ./a.out
0.000000 - 0.220000
mit gcc 4.5.1.
Jetzt wird ab -O1 der Funktionskörper von test_fixed wegoptimiert, so dass nur das erste ein sinnvoller Vergleich ist (ich habe bisher nicht rausgekriegt, wie ich diese spezielle Optimierung unterbinde), aber es scheint so zu sein, als habe zumindest der gcc größere Probleme, im Optimierer mit VLAs umzugehen als mit normalen Arrays.