我正在写一个基于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;
}