一日考えたのですがやっぱり分からないので教えてください。

Cの関数に入ったところに
  push  ebp
  mov  ebp, esp
  sub   esp, 8
  and   esp, -16
というコードがあるんですが、
  and   esp, -16
は一体何をしたいんでしょうか?
  and   esp, 0xfffffff0
と、スタック位置を256byteアラインメントしているようなんですが・・・。
少々ポインタ操作を誤っても隣の関数のスタック領域を破壊しないようにとの配慮なのでしょうか?