我编写了一个程序,在启动时需要大约1GB的RAM归零,这比从冷启动结合的其余程序花费更多的时间。 (这是一个简单的程序,后续运行几乎没有时间分配)。当通过任务管理器观看时,它几乎没有RAM启动,然后增长大约2MB /秒,直到达到它需要的1GB。我找到了选项“Heap Reserve Size”和“Heap Commit Size”,并将它们设置为每个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,但它没有解释我观察到的行为。
答案 0 :(得分:3)
您的内存分配不会导致速度问题。你的速度问题是由于复制~2MB的零512次造成的。改变这些属性不会对你有所帮助。
我会研究将内存归零的有效方法,而不是依靠std::vector
为你做这件事。或者,至少,不要将2MB数据的std :: vector作为参数传递给构造函数。让默认构造函数创建512个空向量,然后将每个向量的大小调整为2MB。至少那不是内存副本;只是一堆内存写。
答案 1 :(得分:2)
我意识到这可能是因为第一次运行必须将RAM中的内容分页到硬盘驱动器,而后续运行在第一次运行后留下了所有未使用的RAM。分配/归零与它无关。对不起。