c++ - 堆栈内存/堆栈

标签 c++ visual-studio-2010 vector stack

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

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

当您这样创建 vector 时:

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

return 0;
}

该 vector 现在使用堆栈内存吗?由于您的 vector 包含 2 个 int,这是否意味着正在使用 8 个字节的堆栈内存?

根据 MSDN 文档:

For x86 and x64 machines, the default stack size is 1 MB.

这看起来并不是很多内存。您希望增加堆栈内存的情况的示例是什么? Visual Studio 中是否有任何方法可以准确监控当前使用的堆栈和堆内存量?

在这种情况下我可以采取什么措施来防止不断读取输入文件?

最佳答案

Is that vector now using stack memory?

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

编辑

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

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

关于c++ - 堆栈内存/堆栈,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10803882/

相关文章:

c# - ForEach && 检查 2 个面板

vb.net - 如何围绕无边框表格绘制轮廓?

windows - WiX 安装程序条件编译?

language-agnostic - 你如何归一化零向量

c++ - 为什么使用 QVector(Qt) 而不是 std::vector

c++ - 如何将 char* 传递给 GetModuleHandle 函数?

c++ - 当对象的指针存储在 vector 中时,如何访问对象中的方法?

c++ - 查找所有重叠一点的时间间隔

c++ - Linux ioctl -> 如何判断当前 IP 是否由 dhcp 获取

计算两个 vector 之间的角度(atan2 不连续问题)