零碎整理

一、内存分配中的栈式和堆式分配

在高级程序设计语言(如c/c++javac#等)中,对于值类型和引用类型变量在内存中分配空间一般是以栈式和堆式来分配的。

栈式分配的内存申请和释放都由系统来管理;堆式分配的内存由程序员申请空间大小,至于释放分为由程序员释放(如c/c++)和由编译系统垃圾回收(如javac#托管型)两种。

问题:

1、栈式和堆式的各自特点(从数据结构实现角度)、运行时特性(用于存放什么类型变量,速度、效率如何)都需要好好考虑考虑。

2javac#中栈式和堆式有无不同之处,gc机制又如何。

二、相比c++而言,c#或是java为何舍弃多继承而采用单继承多接口方式

可从以下几个方面考虑:

1、从编译器角度,在程序编译时的复杂度上,单继承要容易些

2、从java或是c#语言设计者角度来看,以追求安全、可靠、简单为目的(当然从另一个角度可以说是不够灵活)

三、在c#中的委托和c++中函数指针的异同

毕竟也带着个'c'c#中提供类似函数指针的功能,那就是委托,就是一种提供对函数方法的引用,

其与函数指针的不同点有如下:

1、委托可以引用实例和静态方法,而函数指针只能引用静态方法

2、委托实例独立于它所封装的方法的类,只要那些方法与委托的类型是兼容的

可以这么来理解:

由于在C#中各种变量、类型的声明实现都封装在类中,这里考虑在C++类中的成员函数指针,

对于第2点,委托的作用就是提供方法的引用,只要调用它时满足它的特定参数要求就行,而委托封装的方法可以是类的静态成员方法,也可以是某个类一个实例对象提供的该实例上的一个方法,其不会在封装的是静态还是非静态方法而从外部使用上发生变化。所以可以说委托实例独立于它所封装的方法的类。

对于第1点,委托可以引用实例和静态方法,这个按照上面对第2点的理解可以理解;

但是说函数指针只能引用静态方法,这个刚开始不是很理解,在c++中,类的成员函数分为静态和非静态成员函数,

但是这两种成员函数都可以通过函数指针来引用的,并非只能引用静态方法,没有声明为静态的方法同样可以由函数指针来调用它。

但是再考虑具体情形,如静态方法的函数指针可以作为全局变量(即类的外部)来使用,但是非静态的函数指针只能在类的内部使用,同种情况的委托不会存在这种问题,它是无关它封装的方法的静态或非静态的,从这个角度来看第1点就可以理解了。

 

 

不错的一张图片(一师兄的作品:归途)

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值