Linuxのメモリの使用状況を詳しく調査する方法を教えてください。

物理メモリの使用総量や空きの総量はfreeで見ればよいというのはいいんですが、
起動中のプロセスが実際に何バイト物理メモリを使い、何バイトスワップを使っているか、
bufferやcacheのうち何バイト使っているか、などを詳細に調べたいのです。

topの結果が近いのかな?と思ってはいるのですが、VIRTやRESをいろいろ足し算とか
しても、共有メモリ分がダブって計算されているらしく、物理メモリやスワップ領域の
合計や、freeの結果と揃わないに思っています。