[Rd] object.size vs lobstr::obj_size
h@w|ckh@m @end|ng |rom gm@||@com
Fri Mar 27 20:02:12 CET 2020
On Fri, Mar 27, 2020 at 11:08 AM Tomas Kalibera <tomas.kalibera using gmail.com>
> On 3/27/20 4:39 PM, Hervé Pagès wrote:
> > Hi Tomas,
> > On 3/27/20 07:01, Tomas Kalibera wrote:
> >> they provide an over-approximation
> > They can also provide an "under-approximation" (to say the least) e.g.
> > on reference objects where the entire substance of the object is
> > ignored which makes object.size() completely meaningless in that case:
> > setRefClass("A", fields=c(stuff="ANY"))
> > object.size(new("A", stuff=raw(0))) # 680 bytes
> > object.size(new("A", stuff=runif(1e8))) # 680 bytes
> > Why wouldn't object.size() look at the content of environments?
> Yes, the treatment of environments is not "over-approximative". It has
> to be bounded somewhere, you can't traverse all captured environments,
> getting to say package namespaces, global environment, code of all
> functions, that would be too over-approximating. For environments used
> as hash maps that contain data, such as in reference classes, it would
> of course be much better to include them, but you can't differentiate
> programmatically. In principle the same environment can be used for both
> things, say a namespace environment can contain data (not clearly
> related to any user-level R object) as well as code. Not mentioning
> things like source references and parse data.
I think the heuristic used in lobstr works well in practice: don't traverse
further than the current environment (supplied as an argument so you can
override), and don't ever traverse past the global or base environments.
[[alternative HTML version deleted]]
More information about the R-devel