摘要: 在.Net micro framework的一个项目的开发过程中,有一个GPRS的Modem。我们在主板上通过串口,提供了5v的电压。 GPRS Modem设计板如图: 我们使用TXD和RXD,对应到另外一块主板芯片上面的COM4,在开始实现GPRS Modem拨号的过程中,我想是使用GSM 7.07的标准,在Tera Term终端中,经由STK500开发电板连接上GPRS Modem上面的串口...
阅读全文摘要: IL的确比C#等高级语言来的所谓“底层”,但是很明显,IL本身也是一种高级抽象。而即使是机器码,它也可以说是基于CPU的抽象,CPU上如流水线,并行,内存模型,Cache Lock等东西对于汇编/机器码来说也可以说是一种“封装”。从不同层次可以获得不同信息,我们追求“底层”的目的肯定也不是“底层”这两个字,而是一种收获。了解自身需要什么,然后能够选择一个合理的层次进入,并得到更好的收益,这本身也是一种能力。追求IL的做法,本身并没有错,只是追求IL一定是当前情况下的最优选择吗?这是一个值得不断讨论的问题,我的这篇文章也只是表达了我个人对某些问题的看法。
阅读全文摘要: CLR作为承载IL的平台,就像一个溺爱孩子的父母,操办了孩子生活所需要的一切。这个孩子一嚷嚷“我要吃苹果”,则父母就会拿过来一个苹果。您咋看这个孩子,都还是无法了解父母是如何获得苹果的(new一个Apple对象),怎么为孩子收拾残局的(GC)。虽然这些经常是所谓的“成年人(.NET程序员)必知必会”。而您如果盯着孩子看了半天,耐心分析他吃苹果的过程(使用IL编写的逻辑),最后终于看懂了,可惜发现——tmd老子自己也会吃苹果啊(从C#等高级语言中也能看出端倪来)!
阅读全文摘要: 这两天老赵和老包为IL 是不是汇编语言交了火,eaglet 忍不住也想说两句。
阅读全文摘要: 一早看到包同学的驳文《批驳小赵之IL无用论(1)》,甚是期待,但看了第一个回复,却让我大失所望。包同学能否看清了老赵以前说过的,自己以前说过的,以及老赵昨天说的东西以后再进行反驳呢?我们很多明明是同样的观点,为什么变成相互驳斥了呢?
阅读全文摘要: 道理越辨越明。我不是来吵架的,而是特地来澄清一些概念。赵劼的看法实在有些偏激,但凡与之意见向左的,一概穷追猛打至死。有感于他的毁人不倦大多穿凿附会之说,于是,暂时搁下手上的工作,发此文以正视听。
阅读全文摘要: 我们.NET开发人员必定离不开IL,就算您没有学习,也一定可以在各处看到它的身影。最近在博客园上活跃的IL文章译者包建强同学的一些看法让老赵大为震惊,决定独立开篇,希望可以让大家看到不同的声音。真理越辩越明,也欢迎大家来一起讨论,发表自己意见。老赵也会尽量把朋友们留在老赵博客上的看法汇总起来,并加以回应。《老赵谈IL》也是系列文章,目前的计划有4篇,您现在看到的便是本系列的第1篇:IL是什么,它又不是什么。
阅读全文摘要: 摘要: 本文翻译自Vijay Mukhi所著《C# to IL》,原文地址:http://www.vijaymukhi.com/documents/books/ilbook/contents.htm。本书适合于中等程度的.NET程序员阅读,是了解IL技术的基础书籍。
阅读全文摘要: 经过了《泛型真的会降低性能吗?》一文中的性能测试,已经从实际入手,从测试数据上证明了泛型不会降低程序效率。只是还是有几位朋友谈到,“普遍认为”泛型的代码性能会略差一些,也有朋友正在进一步寻找泛型性能略差的证据。老赵认为这种探究问题的方式非常值得提倡。不过,老赵忽然想到,如果从能从汇编入手,证明非泛型和泛型的代码之间没有性能差距——好吧,或者说,存在性能差距,那么事情不就到此为止了吗?任何理论说明,都抵不过观察计算机是如何处理这个问题来的“直接”。因此,老赵最终决定通过这种极端的方式来一探究竟,把这个问题彻底解决。
阅读全文摘要: 昨天调试一段程序发现内存始终释放不掉,最后终于发现是对String 的错误使用造成,这促使我今天又仔细研究了一下String类型,不研究不知道,一研究发现我过去对String 的很多认识都是错误的,感觉这种错误认识还比较有典型性,于是写下此文和大家一起探讨。
阅读全文摘要: 从现在开始,老赵将推荐一些自认为非常优秀且重要的书籍,并和大家一起交流自己的读书体会。
阅读全文摘要: 这里给出了一段可以搞死ILDASM的IL代码。
阅读全文摘要: 如下,一组4元矢量的排序,如何把排序时间缩减一半?可以用并行算法。[代码]我晕,刚开始我用的算法A,后来又写了个算法B,我还没用并行算法呢,一看B方法比A方法时间缩短了差不多两个数量级,如下A sort time: 00:00:00.5346475B sort time: 00:00:00.0169736太奇怪了也,难道我的B算法二级缓存命中率比较高?谁能再把我的B方法消耗时间再降低一半,可以用任...
阅读全文摘要: CliPeViewer是老刘编写的一个WinForm小程序,能够用来查看托管PE文件中的各种结构。目前有很多能够查看PE信息的程序,支持.NET的也有。不过,CliPeViewer与他们的最大区别在于,这个小程序更在意原汁原味地暴露一个PE文件中的内容,尤其是对于文件中的每个结构、每个字段,除了显示了它的值之外,还显示出了它在PE文件中的偏移量和原始数据。
阅读全文摘要: .NET中反射机制的使用与分析[日期:2008-06-30]来源: 作者:志伟.NET反射的定义:审查元数据并收集关于它的类型信息的能力。元数据是一种二进制信息,用以对存储在公共语言运行库可移植可执行文件 (PE) 文件或存储在内存中的程序进行描述。将您的代码编译为 PE 文件时,便会将元数据插入到该文件的一部分中。而将代码转换为 Microsoft 中间语言 (MSIL) 并将其插入到该文件的另...
阅读全文摘要: 本文介绍了如何从类型中隐藏掉接口的某个成员,并介绍了应用这种技巧实现的只读字典——ReadOnlyDictionary。接口代表着一种契约。但有的时候,接口所达成的契约并不适用于全部的场景,或者说,接口可能定义得“太宽了”。这个时候,就有必要隐藏起某些接口成员。然而,接口既然是一种“契约”,这就要求实现方必须为接口中的所有成员提供实现。所以,这里说到的“隐藏”,是指从对象的视角上隐藏。换言之,就是只有直接在对象上调用成员时,看不到某些接口成员,但如果将对象强制转换为接口类型,依然能看到所有的接口成员。
阅读全文摘要: lock-free 编程实在让人又爱又恨。博主以前曾经写过几篇关于 lock-free 编程的文章。比如关于无锁编程、并发数据结构:迷人的原子。如果想更加深入的了解和实践 lock-free 编程,可以参考CLR 2.0 Memory Model、并发数据结构:Stack。这篇文章并不打算继续阐述如何使用 lock-free 技术,而是谈一下它的负面影响。从而让大家对 lock-free 有个更加全面的认识。
阅读全文摘要: 有时候,我们需要查看一个.NET方法的汇编指令是怎么样的。记得在大学的时候,我们使用gcc -s和objdump来获得一个c程序代码的汇编指令。但是对于.NET程序来说,我们肯定无法轻松地获得这些内容。因为所有的.NET程序都是编译成IL代码的,而只有在运行时才会被JIT编译成本机代码。老赵这里演示一下如何使用WinDbg来做到这一点。
阅读全文摘要: 在上文《尾递归与Continuation》里,我们谈到了尾递归的概念和示例,不过有些朋友对于尾递归的功效依然有所怀疑。因此现在,老赵再简单讲解一下尾递归的优化原理,希望能给大家以一定理性认识。
阅读全文摘要: 今天无意中收到微软“最有影响力开发者”礼包,这比起博客园的其他兄弟虽然不算什么,但这毕竟是我第一次得到微软的称号,还是值得纪念一下。 “最有影响力的开发者”,您好很高兴能够通过“最有影响力的开发者”这个项目将微软最新的技术资源与您一同分享。第一期技术资源我们已经随此次“最有影响力的开发者欢迎礼包”一同邮...
阅读全文