摘要: 我们在使用c#托管代码时,内存地址和GC回收那不是我们关心的,CLR已经给我们暗箱操作。但是如果我们在c#中调用了一个非托管代码,比如vc的DLL,而且他有个回调函数,需要引用c#中的某个对象并操作,这时候你就得要小心了。要是非托管代码中用到得托管代码那个对象被GC给回收了,这时候就会报内存错误。所以我们就要把那个对象“钉”住(pin),让它的内存地址固定,而不被垃圾回收掉... 阅读全文
posted @ 2010-06-09 09:00 逆时针 阅读(2971) 评论(0) 推荐(1) 编辑
摘要: 前段时间花了几天一直在用WinDbg调试一个比较棘手的Bug。这个Bug是C# Team那边发现的,他们的Testcase跑大概10分钟左右会出一个在CLR内部的ASSERT。比较难调试的主要原因在于ASSERT表明一个全局的数据结构出现了问题,本来不应该用完的数组却已经用完了(因为按照设计,这个数组是边使用边清理的,是不会用完的)。初步想到的有下面几种方案来调试:1. 设置数据断点2. 一步一步... 阅读全文
posted @ 2010-06-09 08:35 逆时针 阅读(461) 评论(0) 推荐(0) 编辑
摘要: sizeof在非Unsafe环境下只能用于预定义的一系列类型,如Int,Short等等。而在Unsafe环境下,sizeof可以被用于值类型,但是值类型中不可以有引用类型,否则C#编译器会报错:error CS0208: Cannot take the address of, get the size of, or declare a pointer to a managed type ('Siz... 阅读全文
posted @ 2010-06-09 08:34 逆时针 阅读(12959) 评论(0) 推荐(2) 编辑