MSVC堆保留/提交

MSVC Heap Reserve/Commit

本文关键字:提交 保留 MSVC      更新时间:2023-10-16

我编写了一个程序,它在启动时需要大约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。分配/归零与此无关。对不起。