这是一个简单的 C++ 程序,它接受一个大小参数并分配一个该大小的整数数组。程序是在 Linux 下使用 g++ 编译的,运行在 32 位架构的虚拟机上。当使用高于 1073741823* 的参数(数组大小)调用应用程序时,我得到
分段错误(核心转储)
错误,并且值略小于我得到的值。
在抛出 'std::bad_alloc'
what() 的实例后调用终止:std::bad_alloc Aborted (core dumped)
这是代码:
/* dynamicAlloc.cpp */
#include <iostream>
#include <stdlib.h> //for atoi
#include <cstdlib> // for rand() and srand()
#include <ctime> // for time()
using namespace std;
#define STR_LEN 256
int main(int argc, char* argv[])
{
srand(time(0));
unsigned int iArraySize = 1;
if(argc < 2)
return -1;
iArraySize = atoi(argv[1]);
int *pnValue = new int[iArraySize];
if(pnValue == NULL)
{
cout << "cannot allocate array" << endl;
return -2;
}
for(unsigned int iCounter = 0; iCounter < iArraySize; iCounter++)
{
pnValue[iCounter] = rand();
}
delete[] pnValue;
return 0;
}
为什么我得到两个不同的错误?
另外,如果我有一个非常大的数据,需要处理/按摩数十亿的数据,我是否必须使用数据库来处理如此大量的数据,或者是否有另一种处理大型数据集的方法?
谢谢你的阅读
*1073741823 = (2 ^ 32(位地址)) / 4(int size in byte)) - 1
更新
ulimit -a 的输出是:
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 3808
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 1024
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) 3808
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
Ram 大小配置为 512MB。我想既然每个程序都有它自己的虚拟页面(对于 32 位架构,我认为它是 4GB),那么我可以使用所有的虚拟内存。