In the famous paper \"Smashing the Stack for Fun and Profit\", its author takes a C function
void function(int a, int b, int c) {
char buffer1[5];
char buffe
I have not tried that specific version of compiler or the distribution version you report. My guess would be the 16 is from byte alignment requirements on stack (i.e. all stack adjustments would be x byte aligned and x may be 16 for your invocation).
Note that variable alignment you seem to have started with, is slightly different from the above and is controlled by align markings on the variable in gcc. Try using those and you should see a difference.