【发布时间】:2013-01-10 15:24:37
【问题描述】:
我正在开发 32 位 Ubuntu 12.04。内存为 7.7 GB。当我运行某个进程(用 C++ 编写)并达到 50% 的 RAM 使用率时,该进程会抛出“std::bad_alloc”。 奇怪的是堆大小是无限的(命令 ulimit -v 返回“无限制”)。 那么可能是什么原因呢?
【问题讨论】:
我正在开发 32 位 Ubuntu 12.04。内存为 7.7 GB。当我运行某个进程(用 C++ 编写)并达到 50% 的 RAM 使用率时,该进程会抛出“std::bad_alloc”。 奇怪的是堆大小是无限的(命令 ulimit -v 返回“无限制”)。 那么可能是什么原因呢?
【问题讨论】:
在大多数 32 位平台上,进程不可能寻址超过 4GB(2^32 字节)的虚拟内存。在 32 位 Linux 上,为内核保留 1GB 的地址空间,因此用户进程被限制为 3GB 的可寻址内存。
【讨论】:
在 32 位机器上,即使使用 PAE,单个进程地址空间也不能大于 4GB。
【讨论】: