What size is a cons cell? (was [R] R --nsize 2M runs havoc (under linux))
On Wed, 6 Oct 1999, Martin Maechler wrote:
[Pretty technical for R-help, so consider followups to R-devel.]
However, here is the result of an experiment
[SunOS 5.5.1 Generic_103640-08 sun4u sparc SUNW,Ultra-2]
SZ RSS
--vsize 10M --nsize 4M 96936 84656
--vsize 10M --nsize 3M 76456 64192
--vsize 9M --nsize 3M 75432 64192
--vsize 9M --nsize 2M 54952 43712
--vsize 9M --nsize 1M 34472 23232
--vsize 9M --nsize 1024K 34472 23232
--vsize 9M --nsize 800K 29992 18752
--vsize 9M --nsize 700K 27992 16752
--vsize 8M --nsize 700K 26968 16752
--vsize 5M --nsize 700K 23896 16752
Which indicates
1) --vsize uses byte units as ?Memory says
2) --nsize has `Ncell' units which now seem to use
20 bytes each.. instead of 16
which *is* 20% -- why??
Note: it is machine dependent, and it is 16 on Linux, for me (and the
subject was about Linux).
Answer: A `cons cell' is internally a SEXPREC, and it
allocates by
if (!(R_NHeap = (SEXPREC *) malloc(R_NSize * sizeof(SEXPREC))))
What size is a SEXPREC? It is a union, and one element of the union is
int+(union including double) + int. On some 32-bit machines alignment will
give int+4bytes padding+union+int.
So I think that we should change the order in the union vecsxp.
Note that some of the other elements of the union are triples of pointers,
so I expect it to be 24 bytes on a 64-bit machine.
Brian D. Ripley, ripley at stats.ox.ac.uk Professor of Applied Statistics, http://www.stats.ox.ac.uk/~ripley/ University of Oxford, Tel: +44 1865 272861 (self) 1 South Parks Road, +44 1865 272860 (secr) Oxford OX1 3TG, UK Fax: +44 1865 272595 -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.- r-help mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html Send "info", "help", or "[un]subscribe" (in the "body", not the subject !) To: r-help-request at stat.math.ethz.ch _._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._