std :: bad_alloc ulimit

时间:2013-01-10 15:24:38

标签: c++ bad-alloc

我正在使用32位Ubuntu 12.04。 RAM为7.7 GB。当我运行某个进程(用C ++编写)并达到50%的RAM使用率时,这样的进程会抛出一个“std :: bad_alloc”。 奇怪的是堆大小是无限的(命令ulimit -v返回“unlimted”)。 那可能是什么原因?

2 个答案:

答案 0 :(得分:5)

在大多数32位平台上,进程不可能处理超过4GB(2 ^ 32字节)的虚拟内存。在32位Linux上,为内核保留了1GB的地址空间,因此用户进程限制为3GB的可寻址内存。

答案 1 :(得分:3)

在32位计算机上,即使使用PAE,单个进程地址空间也不能大于4GB。