[clug] Linux max memory per process

Pearl Louis pearl.louis at gmail.com
Thu Nov 17 04:52:06 GMT 2005

Hi David

So, basically,

32-bit system - the max memory you can allocate per process is 3GB.
64-bit system - max is some large number >>1TB.

(assuming the administrator has not set any additional limits) and you
can change this using the HIGHMEM settings if you have root ?
It is not dependent on kernel version (2.4 vs 2.6) and these figures
include both RAM and virtual memory?


On 17/11/05, David Gibson <david at gibson.dropbear.id.au> wrote:
> On Thu, Nov 17, 2005 at 01:48:23PM +1100, Arafangion wrote:
> > On Thu, 17 Nov 2005 02:20 pm, Pearl Louis wrote:
> > > Hi guys
> > >
> > > Just a quick question.  What is the maximum memory per process that
> > > you can have in Linux, both on 32-bit machines and 64-bit machines and
> > > for both 2.4 and 2.6 kernels?  Also, this limit includes both physical
> > > RAM and virtual memory right?
> >
> > This is just my impression after learning C, but here goes, if I'm wrong,
> > correct me.
> >
> > Generally, there is a unique pointer for every char that the process can
> > address.
> >
> > Thus, when using 32-bits, there is a limit of (2^32)*CHARBITS
> >
> > CHARBITS is usually 8, but could be larger.
> >
> > This apparently turns out to be about 4 GB. For 64-bit machines, I'd expect
> > that you'd be able to address an unbelievable amount of memory.
> >
> > If 4 GB isn't enough, there are usually tricks (One I can think of at the
> > moment is to use paging).
> That would be a misleadingingly simplified answer.
> Certainly a 32-bit process cannot address more than 2^32 bytes of
> virtual memory.  However in practice some of that 32-bit address space
> is reserved by the kernel and so is not usable by the process.
> Exactly how much depends on the architecture and the kernel
> configuration: e.g. for a ppc kernel (32 bit kernel), with the default
> configuration each process can access the low 3G of address space.
> The settings of the HIGHMEM configuration parameters can change that,
> though.  A 32-bit process on a ppc64 (64 bit kernel) can access
> (4G-4k) of address space.  I'm not sure what the limit is on x86.
> But beyond that, it's common for a system to have administrator
> controlled resource limits on how much memory of various types a
> process can have mapped - see setrlimit(2).
> A 64 bit process can, theoretically address 2^64 bytes of memory,
> however as far as I'm aware no Linux architecture implements the
> entire range.  For current ppc64 kernels each process has 16TB (2^44)
> of address space, for older kernels it was 2TB.  For ia64, the address
> space limit depends on the page size, which is a kernel configuration
> option (and the address space is discontiguous just to make things
> *really* confusing).  Not sure what the limits are for x86_64 or
> sparc64 - I imagine they'll be >1TB and substantially less than 2^64.
> Again, resource limits apply in practice.
> There are no theoretical limits on how much physical memory a process
> may map, except that imposed by the address space size and the amount
> of physical memory available to the kernel.  A 32-bit machine may even
> have and use > 4GB of physical memory (using HIGHMEM), although it
> can't all be used in the one process.  Again resource limits may cut
> in first.
> --
> David Gibson                    | I'll have my music baroque, and my code
> david AT gibson.dropbear.id.au  | minimalist, thank you.  NOT _the_ _other_
>                                 | _way_ _around_!
> http://www.ozlabs.org/~dgibson
> --
> linux mailing list
> linux at lists.samba.org
> https://lists.samba.org/mailman/listinfo/linux

More information about the linux mailing list