在运行时检测c ++中的堆碎片的便携方式?

时间:2009-09-21 09:16:27

标签: c++ memory heap detect fragmentation

我正在编写一个基于qt的c ++应用程序,我需要能够检测内存碎片,以检查当前系统是否能够实际承受内存负载:程序加载一个大图像(15/21百万像素是在内存中然后对它进行一些过滤(w /稀疏矩阵)。 例如,我在Windows中存在内存碎片问题,VMMap在这方面非常有帮助:问题是一些DLL(Wacom平板电脑“wintab32.dll”和UltraMon应用程序)没有重新定位所以分割地址空间在过程的0x10000000-0x30000000 VA。

我想为应用程序提供某种对碎片问题的认识,并想知道是否已经存在提供VMMAP信息的跨平台(linux / mac / win32)方法。

3 个答案:

答案 0 :(得分:3)

简短回答:没有便携方式。

更长的答案:堆的实现方式及其工作原理是实现的实现细节,在平台,std库和操作系统之间存在很大差异。您必须为每个实现创建一个不同的版本 - 提供,该实现为您提供了一个API来连接它。 (我认为应该是您定位的三个平台的情况。)

答案 1 :(得分:0)

我认为你过于悲观。 21百万像素,即使假设16位的颜色深度和相同大小的alpha通道也只需要168 MB。 32位系统上的可用地址空间以千兆字节为单位。

答案 2 :(得分:0)

这会做你需要的吗?

bool is_contiguous_freestore_available(size_t max)
{
   char* tst = new(std::nothrow) char[max];
   if (tst == null)
      return false;

   delete[] tst;
   return true;
}