Gauche のソースにメモがあるので参考にすればいいんじゃないか。
http://gauche.git.sourceforge.net/git/gitweb.cgi?p=gauche/Gauche;a=blob;f=src/gauche.h;h=9ae7aa27b36e24165b9a6fa8cf8f3b066a00ba6d;hb=HEAD#l184
Gauche の場合はヒープオブジェクトは常に4バイト境界に配置することになっているので下位2ビットは常にゼロになる。
逆に言えば下位2ビットがゼロのときはポインタだってことだし、ゼロでないときはポインタではない。

具体的なレイアウトは処理系によって多少の工夫があるけど、基本的な考え方はどれも似たようなものだよ。
Ypsilon は8バイト境界に配置するようにしてるみたいだね。

R6RS では fixnum が24ビットと書いてる (実際にはちょっと書き方が違うが) のでタグに1バイトは取れる計算になる。