代码改变世界

基础知识

2014-02-14 12:37 by Phenix_Yu, 262 阅读, 0 推荐, 收藏,
摘要:inta[3][4];定义了一个二维数组,该二维数组第0行的地址为a,第1行的地址为a+1,第2行的地址为a+2,想从行的地址得到元素的地址,需在行地址前加上指针运算符“*”,即*a就是第0行首个元素的地址即a[0][0]的地址,而a[0][2]的地址就是在a[0][0]的地址基础上加上位移量2,即*a+2,然后想得到a[0][2]这个元素的值呢就再加上一个指针运算符“*”,即*(*a+2)对于数组指针(pointer to array)的声明是这样: int (*pa)[5]: 表示声明一个指向5个元素数组的指针,与int * 类型不同,数组变量也是指针,所以pa是指针的指针 i... 阅读全文

垃圾回收

2014-02-14 12:33 by Phenix_Yu, 339 阅读, 0 推荐, 收藏,
摘要:1. CLR垃圾回收器采用代(generation)机制,目前支持0、1、2三代。 新构造添加到堆的对象称为第0代。 经过对第0代的垃圾回收之后,第0代的幸存者被提升至第1代。 经过对第1代的垃圾回收之后,第一代的幸存者被提升至第2代CLR初始化时,会为每一代选择预算。第0代的预算约为256K,第1代预算约2M,第2代预算约10M。在实际使用过程中,垃圾回收器会用类似启发式算法调整各代的预算。2. 软件开始运行时,运行时会为每一个Generation预留一块连续的内存(这样说并不严格,但不影响此问题的描述),同时会保持一个指向此内存区域中尚未使用部分的指针P,当需要为对象分配空间时,... 阅读全文

委托与事件

2014-02-14 12:32 by Phenix_Yu, 166 阅读, 0 推荐, 收藏,
摘要:1. 委托是一个定义签名的类型,即方法的返回值类型和参数列表类型。可以使用委托类型来声明一个变量,该变量可以引用与委托签名相同的所有方法。自定义的委托类编译后可以看到都继承了它继承了System.MulticastDelegate类2. 委托定义返回值一般都是void,因为委托变量可以提供多个订阅者注册,如果定义了返回值,结果会是后面一个方法的返回值覆盖前面的,最终只返回一个值,而且发布者与订阅者是松耦合,发布者不关心谁订阅了它的事件,为什么订阅,更不关心返回值3. 事件封装了委托类型的变量,在类的内部不管声明是public还是protected,它总是private,在类的外部注册" 阅读全文

线程同步

2014-02-14 12:28 by Phenix_Yu, 193 阅读, 0 推荐, 收藏,
摘要:1. lock关键字可以用来确保代码块完成运行,提供给lock关键字的参数必须为基于引用类型的对象,该对象用来定义锁的范围。Lock关键字是使用Monitor类实现的 使用lock关键字通常比直接使用Monitor类更可取,一方面是因为lock更简洁,另一方面是因为lock确 保了即使受保护的代码引发异常,也可以释放基础监视器。这是通过finally关键字来实现的,无论是否引发异常它都执行关联的代码块。2. Monitor:与 lock 和 SyncLock 关键字类似,监视器防止多个线程同时执行代码块。Enter方法允许一个且仅一个线程继续执行后面的语句;其他所有线程都将被阻止... 阅读全文

小知识点

2014-02-14 12:23 by Phenix_Yu, 139 阅读, 0 推荐, 收藏,
摘要:ref与out 之间的区别ref 传的参数必须要先初始化,out不必ref传进去的参数在函数内部可以直接使用,而out不可out必须在离开函数前赋值 2. 装箱与拆箱装箱 对值类型在堆中分配一个对象实例,并将该值复制到新的对象中。按三步进行。 第一步:新分配托管堆内存(大小为值类型实例大小加上一个方法表指针和一个SyncBlockIndex),SyncBlockIndex作用是 指示线程同步状态 第二步:将值类型的实例字段拷贝到新分配的内存中。 第三步:返回托管堆中新分配对象的地址。这个地址就是一个指向对象的引用了。拆箱: 检查对象实例,确保它是给定值类型的一个装箱值。将该值从... 阅读全文

基础知识点

2014-02-14 12:04 by Phenix_Yu, 157 阅读, 0 推荐, 收藏,
摘要:1. 所有Powershell命令都将生成的输出作为对象2. Get-Command:用于发现命令 Get-History:检索会话的历史记录,即当前会话执行过的命令,但不包括命令的输出结果 $lastExitCode:用于保存最有一个应用程序的退出码 Invoke-History:调用Session中的历史命令,可以指定命令ID,也可以用数组指定一系列命令, $MaximumHistoryCount:会话历史中存储命令的数量默认为64,可以修改 Start-Transcript path:记录会话全文包括命令输出结果 Stop-Transcript:停止记录 $e... 阅读全文