When objdump the binary, there usually some NOP paddings like
66 66 2e 0f 1f 84 00 00 00 00 00 data32 nopw %cs:0x0(%rax,%rax,1)
or
0f 1f 84 00 00 00 00 00 nopl 0x0(%rax,%rax,1)
or
66 90 xchg %ax,%ax
at the end of each function. What is the purpose of them? And what factors determine their sizes?