I know that there is a hardware capacity of 2^48 bits, and I know that there isn't a lot of native limiting of app memory constraints in general by the kernel, but is there an upper bound of the memory that an app can consume in general besides 2^48 because that's the number of channels available on the DIMM sockets?For reference, Redmond limits their products to ~2TB on most server products.
What is the maximum memory a 64bit process can consume?
64bit
By definition (at least, by a common definition), a 64-bit process can only see 264 bytes of memory. In practice, most operating systems limit each process to a little less than the available address space, so that the kernel can manipulate 64-value that can be pointers to kernel memory, process memory or device memory. A 4EB or 8EB limit is common.Well before that, you'll probably hit an architecture-dependent limit. In particular, a process's memory map has to fit in the machine's MMU, and hardware tends to have only as many bits as necessary. MMUs come with up to four levels of page tables, and Linux (amongst others) can support all four: a PGD (page global directory) listing PUDs (page upper directories) listing PMDs (page mid-level directories) listing PTEs (page table entries). Since each level of indirection is one more step to take on most pointer dereferences, systems . It is common for the size of a page to be 4kB (21242 addressable bytes, however most 64-bit architectures can be configured for larger page tables, so it is hard to give any kind of general answer to the question of how high you can go.Note that the per-process address limit is independent of how much physical memory there can be in the machine. For example, the number of channels available on the DIMM sockets in a PC are a theoretical limit to how much RAM you can have in that PC (although the width of the CPU memory bus is usually the limiting factor). It has no bearing on how much memory or how much address space a process can consume (the memory could be swapped out, or shared between several nodes of a NUMA multiprocessor machine).