One way or another everything is referenced by a global or per interpreter or per thread C variable starting with PL_.
The B module provides access to some of these. But working out total memory used that way is likely to be too hard.
Devel::Peek provides some high level memory statistics (which I have never myself used). I think they are only available for a perl compiled with perl's malloc routines or with a special option set.