事先为C ++应用程序分配内存

时间:2013-08-11 10:07:52

标签: c++

我正在用Qt开发一个C ++应用程序;涉及大量的数字运算。整个操作需要大量的动态内存。但是,要求是可变的,具体取决于用户设置的变量。

在资源监视器中,我可以看到提交内存(操作系统为exe分配的内存)随着时间的推移而不断增加,因为我的程序在动态内存中创建了数组。因此,如果我事先让Windows知道我的exe将使用 X MB 的内存,这是否会提高性能?如果是,那我该怎么做?

3 个答案:

答案 0 :(得分:2)

如果您有大量内存分配和cpu密集型进程一起运行,您可以考虑重构程序以使用一些内存池。

内存池背后的想法是你分配一个资源池,你可能需要在处理生物时,(地图,矢量或你经常遇到的任何对象),以及你需要一个新对象的时间,你从池中取出第一个可用的对象,重置并使用它,当你完成它后,你把它放回池中,以便以后再次使用。

这种模式可能比连续使用new和delete更快,但前提是你的程序在执行时会集中使用动态分配,例如,对一棵巨树进行minmax搜索,或者那么密集的事情。 / p>

答案 1 :(得分:1)

  

因此,如果我事先让Windows知道我的exe将使用X MB的内存,这是否会提高性能?如果是,那我该怎么做?

我不这么认为。您的应用程序运行的内存是虚拟的,您实际上无法很好地控制Windows实际分配/将物理内存映射到虚拟内存的方式。

但您可以尝试预先分配所需的内存量,然后将其用作自定义分配器的池。但是,它可能会导致一些性能损失。

答案 2 :(得分:-1)

您可以进行大量的分配和删除。

char *ptr = new char[50*1024*1024L];
delete[] *ptr;

我怀疑是否会有任何性能差异。