2014年3月12日
摘要: 1、编译器必须实现出C++语言的特性。一般情况下,我们只需要使用这些特性就好了,不需要关心内部的实现细节。但是,有些特性的实现,会对对象的大小和成员方法的执行速度造成影响。因此,有必要了解内部实现的细节。2、首先考虑虚方法,虚方法是用来实现多态的。多态是指对于指针和引用,表面类型和真实类型不一致的情况下,调用真实类型的虚方法。3、虚方法有关的实现细节为: a、父类有一个虚方法表(vtbl),可以认为是一个方法指针的数组(这里注意:对于数组,我们知道元素的类型必须一致,虚方法表中的虚方法类型是不一样的,这里进行了特殊处理),方法指针指向父类的虚方法。 b、子类整体拷贝父类的虚方法表,对于重写.. 阅读全文
posted @ 2014-03-12 18:00 Andy Niu 阅读(615) 评论(0) 推荐(0)
摘要: 1、无论是int,还是uint在底层的存储方式是一样的,都会存在溢出和借位的现象,可以认为是个环,有以下几个情况: a、两个数相加,溢出会变成一个小的数。 b、两个数相减,不够减,借一位。 c、求一个负数,拿0减去对应的正数。注意:正6是0x0000 0006;负6可不是0x1000 0006,而是0 - 0x0000 0006 = 0xffff fffa2、对于int,uint存储方式相同,不同的只是编译器把它当成什么数来解释。比如: int a = 0xffff fff9; unsigned int b = 0xffff fff9; 对于a,把它当成int解释,就是-7;对于b... 阅读全文
posted @ 2014-03-12 15:30 Andy Niu 阅读(416) 评论(0) 推荐(0)
摘要: 1、Python彻底分离了对象和引用,可以认为内存中的对象都是不可修改的,每次修改引用,相当于在堆上重新创建一个对象,引用指向新对象。2、对于数值和字符串,修改意味着引用指向一个新对象。3、集合中的元素都是引用。考虑元组,元组中的引用不能增加删除,也不能修改引用的指向。但是元组本身也是个引用,可以指向另一个元组。4、考虑列表,列表中的引用可以增加删除,也可以修改引用的指向。列表本身也是个引用,也可以指向另一个列表。5、考虑字典,字典的key不能修改指向,value可以修改指向。字典本身也是个引用,也可以指向另一个字典。6、考虑下面的情况,listB = listA, listB 与 listA 阅读全文
posted @ 2014-03-12 15:27 Andy Niu 阅读(3889) 评论(0) 推荐(0)