C++ 堆栈内存/堆栈

C++ 堆栈内存/堆栈,c++,visual-studio-2010,vector,stack,C++,Visual Studio 2010,Vector,Stack,对于我正在开发的程序,我经常需要从包含数十万个整数的文本文件中读取输入。目前,我正在读取一些值并将它们存储在一个向量中。每当我需要的值不在向量中时,我会再次从输入文件中读取并清除旧值,以便为当前读取的值腾出空间 我希望避免这样一种情况:我经常需要读取输入文件,我想知道在出现问题之前,我可以在向量中存储多少值。max_size()返回1073741823,所以我想我可以存储那么多元素,但我想知道内存在哪里使用,以及拥有这么大的向量是否是个好主意 创建向量时,如下所示: int main(){ st

对于我正在开发的程序,我经常需要从包含数十万个整数的文本文件中读取输入。目前,我正在读取一些值并将它们存储在一个向量中。每当我需要的值不在向量中时,我会再次从输入文件中读取并清除旧值,以便为当前读取的值腾出空间

我希望避免这样一种情况:我经常需要读取输入文件,我想知道在出现问题之前,我可以在向量中存储多少值。max_size()返回1073741823,所以我想我可以存储那么多元素,但我想知道内存在哪里使用,以及拥有这么大的向量是否是个好主意

创建向量时,如下所示:

int main(){
std::vector<int> vec;
vec.push_back(3);
vec.push_back(4);

return 0;
}
intmain(){
std::vec;
向量推回(3);
向量推回(4);
返回0;
}
那个向量现在正在使用堆栈内存吗?由于向量包含2个整数,这是否意味着正在使用8字节的堆栈内存

根据MSDN文件:

对于x86和x64计算机,默认堆栈大小为1 MB

这似乎没有太多的记忆。您希望增加堆栈内存的示例是什么?VisualStudio中是否有任何方法可以精确监视当前使用的堆栈和堆内存量

在这种情况下,我能做些什么来防止从输入文件中不断读取

那个向量现在正在使用堆栈内存吗

vec对象位于堆栈上,但随着其增长,它会在堆上内部分配内存

编辑

此外,您可以尝试使用内存映射文件,而不是读取所有文件并将其存储在向量中。据我所知(我自己没有使用过),在内核模式下,页面缓存和文件读取将使您受益匪浅(因为操作系统将根据需要管理文件的加载)

请注意,这仅仅是一个关于在何处进行调查的建议(我认为这可能是合适的,但我对内存映射文件不够熟悉,无法告诉您更多)

那个向量现在正在使用堆栈内存吗

vec对象位于堆栈上,但随着其增长,它会在堆上内部分配内存

编辑

此外,您可以尝试使用内存映射文件,而不是读取所有文件并将其存储在向量中。据我所知(我自己没有使用过),在内核模式下,页面缓存和文件读取将使您受益匪浅(因为操作系统将根据需要管理文件的加载)


请注意,这仅仅是一个关于在何处进行调查的建议(我认为这可能是合适的,但我对内存映射文件不够熟悉,无法告诉您更多)

vector
将元素存储在堆中,而不是堆栈中。你是否真的应该分配那么多堆内存是另一回事,但你不会破坏堆栈。

vector
将元素存储在堆中,而不是堆栈中。你是否真的应该分配那么多堆内存是另一回事,但你不会浪费你的堆栈。

你正在处理的文件有多大?如果大小合理的话,我只需要将整个文件加载到RAM中,然后从RAM开始工作。输入文件仍在修改/添加中,但最终我希望它有350000个整数。通过一次将整个文件读入RAM,您的意思是动态分配一个缓冲区,然后调用ifstream的get?1Meg文件,我可能只是将整个文件读入一个缓冲区,然后使用它来完成工作。如果文件正在被许多其他用户动态更改,那么特定于操作系统的解决方案(如内存映射文件读取)可能会更好。就性能而言,一次1兆字节的读取要比一吨4字节的随机读取快得多。您正在处理的文件有多大?如果大小合理的话,我只需要将整个文件加载到RAM中,然后从RAM开始工作。输入文件仍在修改/添加中,但最终我希望它有350000个整数。通过一次将整个文件读入RAM,您的意思是动态分配一个缓冲区,然后调用ifstream的get?1Meg文件,我可能只是将整个文件读入一个缓冲区,然后使用它来完成工作。如果文件正在被许多其他用户动态更改,那么特定于操作系统的解决方案(如内存映射文件读取)可能会更好。就性能而言,单个1兆字节的读取将比大量的4字节随机读取快得多。