【发布时间】:2013-04-27 12:37:31
【问题描述】:
我有一个问题,我正在处理我需要使用某种二维数组的地方。该数组是固定宽度(四列),但我需要动态创建额外的行。
为此,我一直在使用向量的向量,并且我一直在使用一些包含以下内容的嵌套循环:
array.push_back(vector<float>(4));
array[n][0] = a;
array[n][1] = b;
array[n][2] = c;
array[n][3] = d;
n++
添加行及其内容。问题是我试图创建的元素数量似乎已经耗尽了内存,所以我减少了我正在使用的数量。但后来我开始阅读关于双端队列的内容,并认为它可以让我使用更多的内存,因为它不必是连续的。在这个循环中,我将所有提到的“vector”以及所有声明都更改为“deque”。但后来我的内存似乎又用完了,这一次即使行数减少了。
我查看了我的代码使用了多少内存,当我使用双端队列时,内存稳步上升到 2GB 以上,并且程序很快关闭,即使使用较少的行数也是如此。我不确定内存不足时该循环的确切位置。
当我使用向量时,即使循环退出,内存使用量(对于相同的行数)仍然低于 1GB。然后它继续进行类似的循环,添加更多行,但仍仅达到约 1.4GB。
所以我的问题是。这是正常的双端队列使用两倍以上的向量内存,还是我在认为我可以在声明/初始化和上述代码中用“双端队列”替换“向量”这个词时做出错误的假设?
提前致谢。
我正在使用: MS Visual C++ 2010(32 位) Windows 7(64 位)
【问题讨论】:
-
您是否考虑过使用 固定长度 数组的
std::vector(使用包含float x[4];成员字段的某个类,或者使用std::array,如果有一些C++ 2011 兼容实施)? -
你能把SSCCE放在一起吗?
-
@Basile 这样的简单方法至少可以减少一些问题。我应该想到它,但我从未见过它完成,所以我只是没有想到。谢谢:)
-
@BZ1:好吧,另一种解决方案是创建一个具有命名属性的
struct... -
查看我关于处理大量数据的答案。我不相信您的问题与向量或双端队列有关。无论数据结构如何,您仍然会耗尽内存。
标签: c++ visual-c++ vector ram deque