title: Why alignment is 16 bytes on 64 bit architecture?
body: <pre><code>(gdb) disas foo
  Dump of assembler code for function foo:
  0x00000000004004a8 &lt;foo+0&gt;: push   %rbp
  0x00000000004004a9 &lt;foo+1&gt;: mov    %rsp,%rbp
  0x00000000004004ac &lt;foo+4&gt;: mov    0x13c(%rip),%eax        # 0x4005ee &lt;__dso_handle+30&gt;
  0x00000000004004b2 &lt;foo+10&gt;:    mov    %eax,-0x10(%rbp)
  0x00000000004004b5 &lt;foo+13&gt;:    lea    -0x10(%rbp),%rax
  0x00000000004004b9 &lt;foo+17&gt;:    add    $0x18,%rax
  0x00000000004004bd &lt;foo+21&gt;:    mov    %rax,%rdx
  0x00000000004004c0 &lt;foo+24&gt;:    mov    $0x400498,%eax
  0x00000000004004c5 &lt;foo+29&gt;:    mov    %eax,(%rdx)
  0x00000000004004c7 &lt;foo+31&gt;:    leaveq 
  0x00000000004004c8 &lt;foo+32&gt;:    retq   
  (gdb) l foo
  8   void foo() {
  9       char overme[4] = "WOW";
  10      *(int*)(overme+24) = (int)bad;
  11  }
  </code></pre>
  
  <p>Why not just 8 bytes?</p>