当前的64位Linux内核对64TB的物理RAM和128TB的虚拟内存有限制(请参阅RHEL limits和Debian port)。由于CPU中的地址寄存器如何使用所有位(高位用于页面标志,例如ReadOnly,Writable等),所以当前的x86_64 CPU(即我们在PC中拥有的)具有(虚拟)地址限制2^48 = 256TB。 ExecuteDisable,PagedToDisc等),但规范允许切换到真正的64位地址模式,在2^64 = 16EB(Exa字节)处达到最大值。但是,主板和CPU芯片没有太多的引脚来通过地址总线将所有48位存储器地址传送到RAM芯片,因此物理RAM的限制较低(取决于制造商),但虚拟地址空间本质上可以超过主板上RAM的数量,超过上述虚拟内存的限制。
每个进程的限制是通过如何设置进程的内存虚拟地址空间来提高的,因为堆栈,mmap()区域(和动态库),程序代码本身以及内核映射到进程空间。其中一些设置可以通过向链接器传递参数(有时通过源代码中的特殊指令)或直接使用程序修改二进制文件(二进制文件具有ELF格式)来更改。机器(root)已设置或用户拥有的管理员也有限制(请参阅命令“ulimit -a”的输出)。这些限制可能很软或很难,用户无法克服硬限制。
此外,Linux内核可以设置为允许内存过度使用分配。在这种情况下,程序可以分配大量的RAM,然后只使用几页(参见稀疏矩阵,稀疏矩阵),请参阅Linux kernel documentation。所以在这种情况下,只有在数据填满所请求的内存之后,程序才会失败,而不是在内存分配时。