小编Luk*_*ark的帖子

在32位Linux内核上使用c ++在堆上分配超过2GB的空间

这似乎是一个非常普遍的问题,但我还没有找到明确的答案.

我可以访问运行linux的服务器,具有16 GB的RAM和16核(64位)CPU(/ proc/cpuinfo提供"Intel(R)Xeon(R)CPU E5520 @ 2.27GHz").但是,内核是32位(uname -m给出了i686).当然,我没有root权限,所以我不能改变它.

我正在运行一个C++ - 我编写的程序,它做了一些需要大量内存的计算,所以我需要一个大堆 - 但每当我尝试分配超过2GB时,我得到一个badalloc,尽管ulimit返回"无限".为简单起见,我们只说我的程序是这样的:

#include <iostream>
#include <vector>

int main() {
    int i = 0;
    std::vector<std::vector<int> > vv;
    for (;;) {
        ++i;
        vv.resize(vv.size() + 1);
        std::vector<int>* v = &(vv.at(vv.size() - 1));
        v->resize(1024 * 1024 * 128);
        std::cout << i * 512 << " MB.\n";
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

用g ++(无标志)编译后,输出为:

512 MB.
1024 MB.
1536 MB.
2048 MB.
terminate called after throwing an instance of 'std::bad_alloc'
  what():  std::bad_alloc
Aborted
Run Code Online (Sandbox Code Playgroud)

据我所知,这是32位系统的限制,显然是因为32位指针只能容纳2 ^ …

c++ linux heap 32bit-64bit

5
推荐指数
1
解决办法
1309
查看次数

标签 统计

32bit-64bit ×1

c++ ×1

heap ×1

linux ×1