【发布时间】:2014-07-11 16:03:05
【问题描述】:
我是一名中级程序员。我正在尝试创建一个模拟程序,该程序需要创建一个类的一百万个对象。这些对象中的每一个都将包含七个 12x12 矩阵。 (我知道这是很多内存)。我尝试使用二维向量。但是当我运行它时,它总是被操作系统(Ubuntu)杀死。我尝试使用“新”和 2D 双数组(因为我读到 new 会将内存放在堆上)。但是进程总是被杀死。
我按如下方式分配数组和对象向量
12x12 矩阵
ObjectMatrix = new double*[matSize];
for(int i = 0; i < matSize; ++i) {
ObjectMatrix[i] = new double[matSize];
}
一百万个对象的向量,每个对象包含 7 个这样的 12x12 矩阵
for(int i=0;i<=1E6;i++){
ObjectVector *newObj = new Object();
ObjectVector.push_back(newObj);
}
有没有办法解决这个问题并创建一个包含一百万个或更多对象的向量?
【问题讨论】:
-
如果进程被操作系统杀死,可能是内存问题。您要求太多内存太快。我假设您的系统有足够的内存可以分配。 (还没算过)
-
8 bytes * 144 doubles * 7 matrices * 1000000 objects = approx 7 gigs... -
使用浮点数并检查 ulimit 命令。
-
另外,检查您的目标是 64 位应用程序。 32 位应用程序仅支持 4G 的地址空间。
-
您是否考虑过基于惰性评估的解决方案?也许您并不真正需要向量的所有元素的实际值,而只需要其中的一些。