[Rd] astonishing memory phenomenon

Jens Oehlschlägel-Akiyoshi jens.oehlschlaegel-akiyoshi@mdfactory.de
Fri, 11 Feb 2000 13:15:03 +0100



I have a question concerning memory.

I understood that R takes a fixed amount of memory at startup (which I can
influence with --vsize --nsize) and that gc() shows the memory still free of
the total memory reserved for R.

However, if I create a long vector of character data, gc() only seem to
reflect the space needed for a vector of pointers to char, the space used
for the character data itself is ... hidden!?

Here the data: I have 6 MB heap, and can do

> x <- rep(1, 350000); gc(); rm(x); gc()
         free  total (Mb)
Ncells  61034 250000  4.8
Vcells 350955 786432  6.0
         free  total (Mb)
Ncells  61036 250000  4.8
Vcells 700956 786432  6.0

which is using about 2.67 MB RAM for double numbers.

Trying for 3.05 MB fails (well, rep() obviously needs twice the memory, x <-
double(700000) works)

> x <- rep(1, 400000); gc(); rm(x); gc()
Error: heap memory (6144 Kb) exhausted [needed 3125 Kb more]
       See "help(Memory)" on how to increase the heap size.

Now character data, gc() tells us, that we need half that much RAM as
compared to double numbers.
for empty character WHATEVER SIZE THE CHARACTER DATA HAVE

> x <- rep(paste(rep("0", 0), collapse=""), 700000); gc(); rm(x); gc()
         free  total (Mb)
Ncells  61036 250000  4.8
Vcells 350955 786432  6.0
         free  total (Mb)
Ncells  61039 250000  4.8
Vcells 700958 786432  6.0

> x <- rep(paste(rep("0", 4096), collapse=""), 700000); gc(); rm(x); gc()
         free  total (Mb)
Ncells  61033 250000  4.8
Vcells 350441 786432  6.0
         free  total (Mb)
Ncells  61036 250000  4.8
Vcells 700956 786432  6.0


> x <- rep(paste(rep("0", 8192), collapse=""), 700000); gc(); rm(x); gc()
Error: heap memory (6144 Kb) exhausted [needed 2734 Kb more]
       See "help(Memory)" on how to increase the heap size.


Furthermore the last x successfully  created should contain data of size
700000*4096 Bytes corresponding to  700000*4096/1024/1024 = 2734 MB, which
is impossible given the startup memory, impossible given RAM, impossible
given that no swaping occurs, furthermore the OS (WinNT4) never shows any
additional memory eaten up except that taken at startup.

What's going on?
Regards


Jens Oehlschlägel-Akiyoshi




> version
         _
platform Windows
arch     x86
os       Win32
system   x86, Win32
status
major    0
minor    90.1
year     1999
month    December
day      15
language R





Dr. Jens Oehlschlägel-Akiyoshi
MD FACTORY GmbH
Bayerstrasse 21

80335 München

Tel.: 089 545 28-27
Fax.: 089 545 28-10
http://www.mdfactory.de

-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
r-devel 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-devel-request@stat.math.ethz.ch
_._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._