¿Cuál es la diferencia entre alloca (n) y char x [n]?

Cuál es la diferencia entre

void *bytes = alloca(size);

y

char bytes[size];  //Or to be more precise, char x[size]; void *bytes = x;

...dóndeTalla es una variable cuyo valor es desconocido en tiempo de compilación.