2017-03-29 26 views
2

在尝试在Linux上加载更多2-3GB of data into memory时,遇到out of memory (OOM)问题,32bit binaries and 32 bit Perl为什么32位二进制程序不能超过4GB的限制?

总是想知道为什么一个OS with Demand Paging的功能不能将常驻页面换出到磁盘并加载更多的页面以增加超过4GB的限制?

可能会出现频繁的页面错误(影响性能),但不应该打到OOM问题?

+0

林不知道这应该在堆栈溢出。 – TheValyreanGroup

+0

他们可以https://msdn.microsoft.com/en-us/library/windows/desktop/aa366527(v=vs.85).aspx https://linux.die.net/man/2/mlock只要程序员必须手动完成窗口 – Vality

+0

寻呼和寻址是不同的。一个32位数字有2^32个可能的值。如果用作某种存储器或存储器的地址,这意味着您可以使用32位指针唯一标识2^32个字节。如果一个程序无法识别超过2^32字节(4GB)的内存,无论是支持它们(磁盘,RAM,缓存等),它都无法对它们进行操作。 – Linuxios

回答

1

这是因为32位处理器只能在访问内存时寻址32位,3 GB(3×10243字节)是此操作的限制。

+0

当然,但不能确定操作系统页面错误,并通过将旧页面移出磁盘来释放一些可寻址的空间? – Shashi

+2

@Shashi页面断层是一个完全不同的话题。这里讨论的问题是,你无法使用32位处理超过4GB的内存。是的,你可以分页错误,但你会给这些额外的内存位置什么地址?这就像我要求你用0到9的单个数字来唯一标记二十个信封。 –

0

32位定义了逻辑地址空间的大小。您的程序可以随时访问至多2 ** 32个字节的内存。

如果进程可用的物理内存少于2 ** 32个字节,即操作系统将页面交换到磁盘时。

在过去,当物理内存比地址空间更多时(例如,16位地址空间和1MB内存),处理器通常支持以您的方式交换地址空间段建议。

相关问题