06 2009 档案
摘要:今天上园子,看到了一篇C#中for和foreach循环的性能 ,对其中的三个 int[] foo = new int[100]; 1, foreach (int i in foo) Console.WriteLine(i.ToString()); 2,for(int index=0;indexfoo.Length;index++) Console.WriteLine(foo[index].ToString()); 3,int len=foo.Length; for(int index=0;indexlen;index++) Console.WriteLine(foo[index].ToSt
阅读全文
摘要:引子:今天早上早早醒来无事,上园子依次看到[C#] int与System.Int32有什么区别 理解C#中的System.Int32和int:并非鸡和鸡蛋 异或运算的一个问题,疑似C#编译器的Bug?其中最后一篇 引起了我的好奇,难道CSC还真有bug?我来看看。其实就是很简单的一个程序,[代码]就是运行最后的结果是:0,2不是预期的9,2,后面的评论只是说a ^= (b ^= (a ^= b))相当于2 ^= (9 ^= (2 ^= 9)),具体的也没说明具体的原因是什么。首先说明,托管代码在运行,主要用到3种形式的内存:1.Managed Heap:动态内存分配的地方,由GC来管理,整个进
阅读全文
摘要:固定的和活动的变量&和fixed将变量分为两类:固定的和活动的。固定的变量永久的存在并不会被GC的操作影响。(例如局部变量,值参数和间接指针)活动的变量会被GC重新分配位置或是释放(例如对象中的字段,基础数据数组)。&取固定变量的地址是没有限制的。但是活动变量容易受GC的影响,其地址只能通过fixed来获得,并且地址仅会在整个fixed语句的周期持续有效。静态字段也是活动变量。还有标记为ref或out的也是活动变量,即使这个参数是传递给固定参数的。最后,通过间接指针引用的变量总是固定变量。指针转换在不安全上下文中,下面的转换是隐式的:l 从任何指针类型到void*l 从null到任何指针类型除
阅读全文
摘要:由于机器上IM安装较多,就去http://www.pidgin.im/下了一个pidgin,连上了msn,gtalk还有QQ,比较爽,但是近来发现当打开对话窗口时,选中选择字体老是造成程序crash,无奈之下就不只好不改字体。等了3个pidgin新版本,问题依旧。我天真的认为总会被官方fix的。废话不说,上windbg,开启pidgin,用windbg attach上,一切安好。继续g,依次选中字体,结果问题出现了:省略若干加载模块。。。。。。(1ac4.2890): Access violation - code c0000005 (first chance)First chance exc
阅读全文
摘要:主要参考的是C# Language Specification Version 3.0。
引子
C#是.Net平台上主流的开发语言,和经典的C/C++不同的是,C#所编写的代码是托管代码,由GC来管理内存,省去了new/delete的烦恼。但是,由于某些特殊的要求,比如和底层的操作系统接口,访问内存映射设备或者实现对时间要求苛刻的算法时,C#提供了不安全代码。
阅读全文
摘要:引子:最近想写一些文章,但是每每到中间就放弃了,我觉得写技术文章不难,能把自己脑子想的用文字描述出来并让人看明白很难,两个字:”缺练“。回归正题,给大家整两个小题目,供大家把玩。1.汇编翻译为C语言这是段函数汇编源码,请把它翻译为C代码。[代码]我翻译成C语言是:[代码]再用VS2008反编上边的C代码:[代码]您猜对了吗?2.高阶C#include "stdio.h"int main(){int a[5]={7,8,9,10,11};int *ptr1=(int *)(&a+1);int *ptr2=(int *)((int )a+1);printf("%x,%x",ptr1[-1],*pt
阅读全文
摘要:最近好多人都参与了有道的比赛,其中第2题园子里有很多人给出了程序,在这里我也小谈一下我的想法。题目要求:双倍超立方数是指一个正整数可以正好被拆分为两种不同的a^3+b^3的方式,其中a,b均为整数且0a=b。对于任何一个指定的 int n, 返回所有的小于等于n的双倍超立方数的个数。 DefinitionClass: TwiceSuperCubic Method: count Parameters: int Returns: int Method signature: int count(int n) (be sure your method is public) Constraints
阅读全文
摘要:PS:今天看来IL是不是汇编话题很火,自己以前转过一篇博客,大家看看,希望能有所参考。计算机能够执行机器语言的程序,这种语言的每条指令用简单的电路单元就能实现,称为L0.程序员使用L0非常困难,因为需要很底层的技术,并且L0都是由数字构成的,如果能够设计一种新的简单易用的语言L1,那么就能用L1来写程序了,有两种方法:· 解释方式当执行用L1语言的编写的程序时,使用L0的解释程序对L1的每条指令解码并执行,这样L1程序可以执行,但是必须在执行之前解码· 翻译方式用特别设计的编码的L0程序将整个L1源程序翻译为L0程序,生成的L0就可以直接在硬件上执行了对于每个语言层次,都可以将其假想为一台计算
阅读全文