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

Allocating Memory beforehand for a C++ application

本文关键字:分配 内存 应用程序 C++      更新时间:2023-10-16

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

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

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

内存池背后的想法是,您分配一个资源池,这些资源可能是您在处理存在时所需要的(映射、向量或您经常出现在new的任何对象),当您需要一个新对象时,您从池中获取第一个可用对象,重置并使用它,当你用完后,你把它放回游泳池,这样以后就可以再次使用了。

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

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

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

但是,您可以尝试预先分配所需的内存量,然后将其用作自定义分配器的池。不过,这可能会对性能造成一些影响。

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

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

我怀疑是否会有任何表现上的差异。