MSVC堆保留/提交
MSVC Heap Reserve/Commit
我编写了一个程序,它在启动时需要大约1GB的RAM调零,这比程序其他部分从冷启动时加起来花费的时间还要多。(这是一个简单的程序,后续运行几乎不需要花费任何时间来分配)。当通过任务管理器观察时,它开始时几乎没有RAM,然后以每秒2MB的速度增长,直到达到所需的1GB。我找到了"堆保留大小"answers"堆提交大小"选项,并将它们分别设置为1000000000,但是当我通过任务管理器查看程序时,程序似乎以1GB开始,然后以2MB/秒的速度增长,直到我得到一个bad_alloc。这句话是:std::vector<std::vector<char> > data(512, std::vector<byte>(2097252, 0));
有人可以清楚地解释这些选项是什么,如果有一种方法使用它们来加快我的分配?我读过http://msdn.microsoft.com/en-us/library/f90ybzkh(v=vs.80).aspx,但它不能解释我观察到的行为
您的内存分配不会导致您的速度问题。您的速度问题是由复制~2MB的0 512次引起的。改变这些属性并不能帮到你。
我将研究内存归零的有效方法,而不是依靠std::vector
为您做这件事。或者,至少不要将2MB数据的std::vector作为参数传递给构造函数。让默认构造函数创建512个空向量,然后将每个向量的大小调整为2MB。至少这不会是一个内存副本;只是一堆内存写入
我意识到这可能是因为第一次运行必须将内容从RAM分页到硬盘驱动器,而随后的运行在第一次运行后留下了所有未使用的RAM。分配/归零与此无关。对不起。
- 有根的二进制搜索树.保留与其父级的链接
- 为多个会话保留XPtr
- 在Google Kick start中提交时出错
- 保留对其他类的成员函数的引用
- 使用libcurl提交批量url的正确BING Api POST url是什么
- 指针保留字符串
- 在 leetcode 上提交解决方案时出现堆栈缓冲区溢出错误
- 是否有内置方法可以强制转换为不同的基础类型,但保留常量限定符?
- 如何让 GCC/Clang 在保留标识符上出错
- 必须为 C++20 协程帧保留多少内存?
- 如何将一个窗口保留在另一个应用程序窗口的前面
- 使用 char 分隔符解析C++中的字符串,但将可重复的字符保留为每个解析的子字符串 (C++ STL) 中的分隔符
- 局部变量保留函数中的值
- 保留函数指针模板参数
- 变量超出范围后如何保留向量值?
- 堆栈保留大小和堆栈提交大小的增加会提高应用程序性能吗
- 如何在还原提交并保留单元测试时检查测试
- 增加堆栈大小的缺点以及堆栈提交和保留之间的差异
- MSVC堆保留/提交
- 如何判断已提交内存和保留内存中的内容