便携式方式++检测堆碎片在C运行时?
-
12-09-2019 - |
题
我正在写一个基于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;
}
不隶属于 StackOverflow