A simple test will show you: main() { char *b = alloca(500); return b[3]; } Compile with gcc, and you'll see that alloca is implemented directly, without function calls. __builtin_alloca is the internal way gcc implements it; either works just fine but __builtin_alloca is more immune to being #define'd to something else. It's not specific to Cygwin.