Java的方法调用过程
Java变量:基本类型变量、指针变量
push
- 压入新的栈桢
- 在栈桢内部创建局部基本类型变量,接收参数值
- 在栈桢内部创建局部指针变量,接收参数值后,该指针变量指向堆上实例
pop
- 弹出栈桢
- 基本类型变量和指针变量均被销毁
- 弹出原始栈桢
- 指针变量被销毁,堆上实例被垃圾回收
- 当然如果上层栈桢有接收,此实例将不会被回收
C的函数调用过程
C变量:基本类型变量、结构体、枚举、指针变量
push
- 压入新的栈桢
- 在栈桢内部创建局部基本类型变量,接收参数值
- 在栈桢内部创建局部结构体变量,接收参数值(内存重复消耗,未面向对象)
- 在栈桢内部创建局部枚举变量,接收参数值(内存重复消耗,未面向对象)
- 在栈桢内部创建局部指针变量,接收参数值后,该指针变量指向原始栈桢上的基本类型变量、结构体、枚举、指针变量
pop
- 弹出栈桢
- 该栈桢上的所有变量均被销毁
- 弹出原始栈桢
- 原始栈桢上的基本类型变量、结构体、枚举、指针变量被销毁
- 当然手动申请和初始化的空间不手动处理是无法回收的
总结
C比Java更精致,自己看着用。。。