2013-01-10 61 views
2

我正在使用32位Ubuntu 12.04。 RAM是7.7 GB。當我運行某個進程(用C++編寫)並達到內存使用量的50%時,此進程會拋出「std :: bad_alloc」。 奇怪的是,堆大小是無限的(命令ulimit -v返回「無限制」)。 那麼可能是原因?std :: bad_alloc ulimit

回答

5

在大多數32位平臺上,進程無法處理超過4GB(2^32字節)的虛擬內存。在32位Linux上,1GB的地址空間是爲內核預留的,因此用戶進程被限制爲3GB的可尋址內存。

3

在32位機器上,即使使用PAE,單個進程地址空間也不能大於4GB。