Output from various sizes of char myStr[] in binding.c. myStr is declared as a local variable in main thus the compiler allocates space in the call frame for main on the stack. gcc allocates strings in chunks of 32. #char[17] movq $97, -32(%rbp) movq $0, -24(%rbp) movb $0, -16(%rbp) 32 - 16 + 1 = 17 #char[19] movq $97, -32(%rbp) movq $0, -24(%rbp) movw $0, -16(%rbp) movb $0, -14(%rbp) 32 - 14 + 1 = 19 #char[33] movq $97, -48(%rbp) movq $0, -40(%rbp) movq $0, -32(%rbp) movq $0, -24(%rbp) movb $0, -16(%rbp) 48 - 16 + 1 = 33