虽然看了一些书,还网络上的一些博文,不过对CLR托管内存细节一直比较模糊。而且因为工作原因总会有很多质疑,想要亲眼看到内存里二进制数据的变化。

所以借助winhex直接查看内存以证实书上的描述或更进一步揣摩CLR托管内存的运作方式,这里写下来跟大家一起分享(由于自己这方面知识储备不太充足,下面的好多内容也是猜测,肯定有很对错误,希望了解的网友可以帮忙指正)

 

测试环境: windowsXP win10 win7 (dotnet4.0 Releases编译 ,下文截图为win7上的运行结果)

内存查看工具: winhex 7.5

 

虽然重点是监测二进制的内存,不过基本的测试代码还是要有的(测试是直接运行编译好的exe,没有使用调试模式,编译时要使用Releases,因为debug跟Releases在GC回收时对象是否可达的判断是不一样的)

下面对内存的查找部分看起来可能有点跳跃,因为是借助了反复测试得到的规律,很多过程没有赘述

 

进行之前需要先简单了解CLR对象分配(类型对象指针要知道),GC的基本过程(G0,G1,G2需要简单了解),二进制数据的存储(主要是大小端)

网友评论