You can get that sort of information from the /proc/<pid>/smaps
file for each process in the form of the Pss
entry (short for "Proportional share size").
In the above example with 200MB "shared" between two processes, each process would show 100MB in the PSS entry for that mapping, i.e. the memory is distributed evenly between the processes that share it (until it gets copied and unshared by either process).
Here's an extract from running something like what you posted:
$ top
...
30986 me 20 0 790m 769m 2200 S 0 4.8 0:00.48 python3.2
30987 me 20 0 790m 767m 224 S 0 4.8 0:00.00 python3.2
$ cat /proc/30986/smaps
...
0119a000-015b7000 rw-p 00000000 00:00 0 [heap]
Size: 4212 kB
Rss: 3924 kB
Pss: 1992 kB
...
7fa06b020000-7fa09ab11000 rw-p 00000000 00:00 0
Size: 781252 kB
Rss: 781252 kB
Pss: 390626 kB
...
7fff8e45a000-7fff8e489000 rw-p 00000000 00:00 0 [stack]
Size: 192 kB
Rss: 160 kB
Pss: 82 kB
...
(There's a lot of stuff in those files, including mappings for shared libraries that are potentially shared between many processes, and thus each process gets only a small part accounted in its PSS entry for those.)
Here's a nice article about this: ELC: How much memory are applications really using?
I don't know of a common top-like tool to display this information, and I don't think ps
has options to show that either unfortunately. The article points to a repository with python scripts called pagemap
by Matt Mackall that you could use or adapt though.
Shameless plug: you'll find a few posts on Unix & Linux about PSS and the smaps
file if you're interested in that.