Rev 85908 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed
% File src/library/base/man/Memory-limits.Rd% Part of the R package, https://www.R-project.org% Copyright 1995-2014 R Core Team% Distributed under GPL 2 or later\name{Memory-limits}\alias{Memory-limits}\concept{memory}\concept{limits}\title{Memory Limits in R}\description{\R holds objects it is using in virtual memory. This help filedocuments the current design limitations on large objects: thesediffer between 32-bit and 64-bit builds of \R.}\details{Currently \R runs on 32- and 64-bit operating systems, and most 64-bitOSes (including Linux, Solaris, Windows and macOS) can run either32- or 64-bit builds of \R. The memory limits depends mainly on thebuild, but for a 32-bit build of \R on Windows they also depend on theunderlying OS version.\R holds all objects in virtual memory, and there are limits based on theamount of memory that can be used by all objects:\itemize{\item There may be limits on the size of the heap and the number ofcons cells allowed -- see \code{\link{Memory}} -- but these areusually not imposed.\item There is a limit on the (user) address space of a singleprocess such as the \R executable. This is system-specific, and candepend on the executable.\item The environment may impose limitations on the resourcesavailable to a single process: Windows' versions of \R do so directly.}Error messages beginning \samp{cannot allocate vector of size}indicate a failure to obtain memory, either because the size exceededthe address-space limit for a process or, more likely, because thesystem was unable to provide the memory. Note that on a 32-bit buildthere may well be enough free memory available, but not a large enoughcontiguous block of address space into which to map it.There are also limits on individual objects. The storage spacecannot exceed the address limit, and if you try to exceed that limit,the error message begins \samp{cannot allocate vector of length}.The number of bytes in a character string is limited to\eqn{2^{31} - 1 \approx 2\thinspace 10^9}{2^31 - 1 ~ 2*10^9},which is also the limit on each dimension of an array.}\section{Unix}{The address-space limit is system-specific: 32-bit OSesimposes a limit of no more than 4\abbr{Gb}: it is often 3\abbr{Gb}. Running32-bit executables on a 64-bit OS will have similar limits: 64-bitexecutables will have an essentially infinite system-specific limit(e.g., 128Tb for Linux on x86_64 CPUs).See the OS/shell's help on commands such as \code{limit} or\code{ulimit} for how to impose limitations on the resources availableto a single process. For example a \command{bash} user could use\preformatted{ulimit -t 600 -v 4000000}whereas a \command{csh} user might use\preformatted{limit cputime 10mlimit vmemoryuse 4096m}to limit a process to 10 minutes of CPU time and (around) 4\abbr{Gb} ofvirtual memory. (There are other options to set the RAM in use, but theyare not generally honoured.)}\section{Windows}{The address-space limit is 2\abbr{Gb} under 32-bit Windows unless the OS'sdefault has been changed to allow more (up to 3\abbr{Gb}). See\url{https://docs.microsoft.com/en-gb/windows/desktop/Memory/physical-address-extension}and\url{https://docs.microsoft.com/en-gb/windows/desktop/Memory/4-gigabyte-tuning}.Under most 64-bit versions of Windows the limit for a 32-bit buildof \R is 4\abbr{Gb}: for the oldest ones it is 2\abbr{Gb}. The limit for a 64-bitbuild of \R (imposed by the OS) is 8Tb.It is not normally possible to allocate as much as 2\abbr{Gb} to a singlevector in a 32-bit build of \R even on 64-bit Windows because ofpreallocations by Windows in the middle of the address space.}\seealso{\code{\link{object.size}(a)} for the (approximate) size of \R object\code{a}.}\keyword{environment}