首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Windows 7中的堆信息

Windows 7中的堆信息
EN

Stack Overflow用户
提问于 2014-03-30 13:39:13
回答 1查看 506关注 0票数 1

我在win7中做了一个简单的实验,使用以下代码测试它在内存分配中对堆的组织:

char *pointer[50];

for(i=0;i<=49;i++) pointer[i]=new char[64];

for(i=0;i<=49;i++) printf("0x%X\n",pointer[i]);

输出结果为:

0x572F00

0x572F48

0x572F90

.

显然,两个相邻指针之间的空间是72字节而不是64字节。必须在每个堆区块的前几个字节中保存一些信息。我打印出了8个额外字节中的值,发现它们是:

71 39 19 36 B3 9F 00 08

有人能告诉我如何从这些值中判断出堆块的大小吗?谢谢!

EN

回答 1

Stack Overflow用户

发布于 2014-03-30 14:02:55

仅仅是你想要这样做的想法就相当可怕。这是未记录的信息,可能会在没有通知的情况下更改,在调试和非调试版本之间可能会有所不同,等等。我强烈建议您找到另一种方法,例如使用您自己的分配器存储长度。

在回答你的问题时,我知道存储的信息是一个向前和向后链接和一些标志。这些链接可能使用XOR方案存储在单个指针中。可能也有一个前哨。

如果你真的想知道这个问题的答案,很容易就能找到。只需在Visual Studio中编译和运行您的程序,然后进入new的C运行时库代码。所有的声明和代码都在那里供您阅读。完整的评论,非常直白的东西。

请注意:这是与Windows7API无关的。这是与C++编译器(我假设是Visual Studio)关联的运行时库。

Windows7内部有几个内存分配器,但那是一个完全不同的故事。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22740683

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档