変数はアライメントといって, ある一定の倍数のアドレスに変数領域が確保されます.
アライメントは変数のサイズと同じことが多いですが, そう定義されているわけでもなく, 例外もあります.
アライメントについては次のサイトが詳しいです.
http://www5d.biglobe.ne.jp/~noocyte/Programming/Alignment.html

例えばアライメントが4の場合, 変数のアドレスは4の倍数となります.
そのため変数のアドレスは下位2ビットが常に0となります.
そこでこの下位2ビットに自由な情報を付加してみます.