【发布时间】:2015-11-23 07:27:14
【问题描述】:
一个例子:
char *p1 = HeapAlloc(GetProcessHeap(), 0, 12); // returns 0x1234
char *p2 = p1 + 7;
// ...
void *p;
size_t size;
if(GetHeapBlock(p2, &p, &size))
printf("%p (%zd)", p, size); // should print "0x1234 (12)"
如何实现上面的GetHeapBlock函数?
我查看了Proc Heap Viewer、HeapMemView 程序,但它们显示的信息并不完全符合我的预期。例如指针有时较低,尺寸较大,因此对于上面的示例,它们可以显示大小为 256 的 0x1200。此外,两者都显示不同的信息。
一般来说,我可以调用GetProcessHeaps,并为每个指针调用HeapValidate,从输入变低开始。然后我可以打电话给HeapSize。但这听起来效率极低。有没有更好的解决方案?
附:我需要这个用于诊断,而不是用于生产,因此不是 100% 可靠/高性能的解决方案是可以接受的。
【问题讨论】:
标签: c windows winapi heap-memory