c++ - 在运行时检测 C++ 中的堆碎片的可移植方法?

标签 c++ memory heap-memory detect fragmentation

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

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

最佳答案

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

更长的答案:堆是如何实现的以及它是如何工作的是你的实现的实现细节,在平台、标准库和操作系统之间有很大的不同。您必须为每个实现创建一个不同的版本——前提是,该实现为您提供了一个 API 来 Hook 它。 (我认为您针对的三个平台应该是这种情况。)

关于c++ - 在运行时检测 C++ 中的堆碎片的可移植方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1453568/

相关文章:

Java内存模型: compiler rearranging code lines

c++ - std::vector 中未初始化的移动

java - Hadoop:堆空间和gc问题

java - 进行大查询时内存不足?

c++ - 如果RMW操作没有任何变化,是否可以针对所有内存顺序对其进行优化?

c++ - C++参数包类型扩展

c++ - CUDA内核模板实例化导致编译错误

没有默认构造函数的 C++ 成员数组初始化

ios - 在 UIImageView 中加载 gif 图像时减少内存消耗

C++/Windows : HeapAlloc() for contention-free per-thread heaps