对于我正在处理的程序,我经常需要从包含数十万个整数的文本文件中读取输入。目前,我正在阅读一些值并将它们存储在矢量中。每当我需要的值不在向量中时,我再次从输入文件中读取并清除旧值,以便为我当前正在读取的值腾出空间。
我想避免一种我经常需要从输入文件中读取的情况,并且我想知道在出现问题之前我可以在向量中存储多少个值。 max_size()返回1073741823,所以我想我可以存储那么多元素,但我想知道在哪里使用内存,以及是否有一个大的向量是个好主意。
当您创建矢量时:
int main(){
std::vector<int> vec;
vec.push_back(3);
vec.push_back(4);
return 0;
}
那个向量现在使用堆栈内存吗?由于你的向量包含2个int,这是否意味着正在使用8个字节的堆栈内存?
根据MSDN文档:
对于x86和x64计算机,默认堆栈大小为1 MB。
这似乎不是很多记忆。您希望增加堆栈内存的情况示例是什么?在Visual Studio中是否有任何方法可以准确监视当前正在使用多少堆栈和堆内存?
在这样的情况下,我能做些什么来防止从输入文件中不断读取?
那个向量现在使用堆栈内存吗?
vec对象在堆栈上,但它在内部随着它的增长在堆上分配它的内存
编辑
此外,您可以尝试使用内存映射文件,而不是读取所有文件并将其存储在向量中。根据我的理解(自己没有使用它们),您将受益于内核模式下的页面缓存和文件读取(因为操作系统将根据需要管理文件的加载)。
请注意,这仅仅是关于在何处进行调查的建议(我认为这可能是合适的,但我对内存映射文件不够熟悉,不能告诉您更多)
vector
将元素存储在堆中,而不是堆栈中。你是否应该真正分配那么多堆内存是另一回事,但你不会打击你的堆栈。