【发布时间】:2015-12-06 08:30:37
【问题描述】:
我得到了不断增加大小的二维向量(因为它包含所有排列模式)但是当我形成 11 个变量排列时,我的程序将崩溃,因为向量变得太大并且我的 ram 无法承受它,我应该如何解决这个问题 ?我试图将格式输出为文本,但是文本文件变得太大,只有几 GB 并继续增长,这花费了太长时间。
我的笔记本电脑,i7 4700MQ,8GB 内存,Windows 8.1 Pro x64
下面是我用来形成二维向量的代码。
while (next_permutation(route.begin() + 1, route.end())) {
//check for every route permutation
//first store route pattern x inside 1st vector,then will store the next route pattern in another row.
for (counter = 0; counter < route.size(); counter++) {
routePattern.push_back(route[counter]);
}
routeFormation.push_back(routePattern);
routePattern.clear();
}
【问题讨论】:
-
在速度和空间之间的通常权衡中(很少有相同的类型),你可以继续使用向量并将东西保存在内存中,但是你不能保持为您显然想要的大量数据;或者您可以将所有数据保存到磁盘,然后可以拥有大量数据,但处理速度会比较慢。
-
将数据包含到磁盘的最佳方法是什么?似乎文本文件不是一个好主意
-
如果你memory map the file,可以把它当作普通内存,以原生二进制格式存储数据。您可以保留一个法线向量来跟踪每个“行”的大小,这样可以更轻松地在内存映射文件中找到特定行。
-
您可以使用一个线程写入文件而另一个线程计算排列的线程,这样您将有效地用完时间,同时确保您的 RAM 从一端得到清理.
-
有 11 个元素,你有
39916800排列,你必须乘以排列的大小......
标签: c++ memory vector 2d-vector