windows - 尝试可视化堆碎片
问题描述
我试图测量堆碎片,我将使用这个公式:
碎片 = 1 - (LargestFreeBlockAvailable / TotalFreeMemory)
棘手的部分是找到最大的空闲块。
我发现这段代码允许我显示堆中的所有块: https ://docs.microsoft.com/en-us/windows/win32/toolhelp/traversing-the-heap-list
我正在尝试创建碎片分配和释放越来越大的块:
std::allocator<char> alloc;
char * tmp = alloc.allocate(100);
alloc.deallocate(tmp,100);
tmp = alloc.allocate(200);
alloc.deallocate(tmp,200);
tmp = alloc.allocate(300);
alloc.deallocate(tmp, 300);
tmp = alloc.allocate(400);
alloc.deallocate(tmp, 400);
tmp = alloc.allocate(1000);
alloc.deallocate(tmp, 1000);
tmp = alloc.allocate(2000);
alloc.deallocate(tmp, 2000);
tmp = alloc.allocate(3000);
alloc.deallocate(tmp, 3000);
tmp = alloc.allocate(5000);
alloc.deallocate(tmp, 5000);
alloc.allocate(15000);
但是当我运行程序时没有看到碎片,只有一个空闲块对应于可用内存: 结果
就像我之前释放的块合并到最后一个大块......堆中没有任何“洞”表明碎片。有人知道避免碎片的机制吗?也许我做错了创建碎片?
先感谢您。抱歉英语不好。
解决方案
推荐阅读
- python - View 没有返回 HttpResponse 对象。它返回 None 代替。当与 FormView 一起使用正常形式时,django
- java - 属性名称中的 JBoss CLI 特殊字符
- python - 将数据发送到烧瓶而不重新加载页面
- c++ - c++ 项目中令人困惑的定义指令
- java - 休眠搜索将一个实体索引到两个不同的索引
- selenium - Selenium 未通过代理加载页面,显示构建信息:版本:'未知',修订:'未知',时间:'未知'
- c++ - 结构化绑定初始化程序表单 { assignment-expression } 在 clang 上的数组类型失败
- python - 如果 Pandas 数据框中的两个布尔值为真,如何替换元素
- webpack - 运行 webpack encore 时出现语法错误
- c# - 为什么我不能使用 SHA256 创建 jwt 令牌?