子程序与控制抽象
- 子程序是主要控制抽象,参数化子程序调用时形参映射进子程序控制子程序行为
- 帧内对象通过相对于帧指针的位移寻址,编译时不能确定大小的对象,将地址和内情向量存储在相对于帧指针的固定位置处
参数传递
- java 中基本类型值传递,对象类型共享传递(引用传递)
- 闭包 :对程序的引用包含子程序的引用环境
- 通用型参数必须做类型检查,每个参数被求值一次,遵循常规作用域规则
- c++中通用型类必须实例化,通用型函数不需要显示实例化,如果通用型单元被用某个参数实例化,而该参数不支持这个操作,将引起静态语义错误
异常
- 异常的一般性规则:
- 异常在当前子程序没有处理,子程序就非正常返回,异常在调用点再次引发
- 如果异常在调用程序中未得到处理,异常将沿着动态调用链继续传播
- 子程序头部包含一个异常表
- c++中表列出了所有子程序可能传播的异常,如果没有表则全部异常可以传播
- java 表中列出的异常检查并传播,未列出异常则不检查
- 异常处理机制必须强制回退运行堆栈,回收异常中逃出的子程序的堆栈帧,回收堆栈帧的同时,恢复调用序列寄存器(恢复环境)
- c++中异常离开一个作用域时,需要调用这个作用域所有声明的对象的析构函数
- setjump将当前寄存器保存到setjump缓冲区中,longjump时恢复,不去实现回退堆栈,只时恢复fp和sp值直接丢掉嵌套子程序堆栈
数据抽象和面向对象
- 派生类自动有基类的成员和方法
派生类构造函数在函数执行前先执行基类构造函数,派生类可以隐藏和替换基类成员
封装与集成
- 保护成员只对本类及其派生类的方法可见,对基类和派生类对象均不可见
- java不提供对基类的protected 和 private 指定方式,即派生类既不能提升也不能限制基类成员可见性
java 类的 protected 成员不仅在派生类内部可见,在本类所属的整个包内可见
初始化与终结
- 构造函数根据参数个数和类型差异区分
- 引用模型中对象是显示创建的,保证调用适当构造函数;值模型创建对象是声明加工的隐含结果
c++声明变量却没有给初始值时,编译器自动调用无参构造函数,如果不存在无参构造函数却有其他构造函数,将导致静态语法错误
- 重量级线程有自己的地址空间,轻量级线程可能共享地址空间
- 通信:线程使用去获得其他线程产生的信息的机制,命令式程序的通信机制都基于共享存储或者消息传递
- 同步: 线程间发生顺序的控制
消息机制隐含实现同步,必然是先发送后接受,共享存储机制不隐含同步,接收方可能读取老值