我正在写一个基于Qt的C ++应用程序,我需要能够检测,以检查当前系统实际上可以维持存储器装载存储器碎片:程序加载一个大的图像(15/21百万像素是在存储器中,然后规范)就可以了(W /稀疏矩阵)执行一些滤波。 举例来说,我有在Windows和的VMMap内存碎片问题非常有帮助在此:问题是某些DLL(Wacom数位板“wintab32.dll”和应用程序的UltraMon)没有得到重新定位,以便被分割的地址空间在该方法的0x10000000-0x30000000 VA。

我要提供某种朝着碎片化问题的认识,并想知道如果一个跨平台(Linux的/ MAC / win32)中的做法给予的VMMap给出已经存在的信息的应用程序。

有帮助吗?

解决方案

简短的回答:没有可移植的方法。

长回答:堆是如何实现的,以及它如何工作的是你实现的实现细节,平台,标准库和操作系统之间有很大不同。你必须创建一个不同的版本,每个实现的 - 提供,实施为您提供了一个API来连接它。 (其中的我觉得的应该是你的目标的三个平台的情况。)

其他提示

我觉得你是过于悲观。 21兆像素,即使假设16个比特的颜色质量汇总和相等尺寸的alpha通道将采取只有168 MB。一个32位的系统上可用的地址空间被以千兆字节测量。

这会做你需要什么?

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

   delete[] tst;
   return true;
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top