0

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

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

4

3 回答 3

2

如果您有很多内存分配和 CPU 密集型进程一起运行,您可能会考虑重组您的程序以使用一些内存池。

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

这种模式可能碰巧比连续使用 new 和 delete 更快,但前提是您的程序在执行时密集使用动态分配,例如,在巨大的树上进行 minmax 搜索,或者像这样密集的事情。

于 2013-08-11T10:21:11.260 回答
1

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

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

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

于 2013-08-11T10:21:33.767 回答
-1

你可以做一个大的分配和删除。

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

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

于 2013-08-11T10:10:47.107 回答