- 方法调用时栈内存的分配
- 对 stack frame 的分析
stack frame:一个方法被调用时,它在栈内存中的布局。
C# 中调用方法时的变量归 Caller(主调函数) 管,不归 Callee(被调用者) 管。
压变量入栈,C# 是从左至右的顺序。
图示是为了重点解释方法、变量、参数的压栈,实际情况下还要压入返回地址等。
返回值一般存在 CPU 的寄存器里面,特殊情况寄存器存不下该返回值时,会到栈上开辟空间。
stack overflow 就是栈无限向上延伸(分配变量、参数、栈针等),最后溢出了。
代码
using System;namespace CSharpMethodExample{class Program{static void Main(string[] args){double result = Calculator.GetConeVolume(100, 90);}}class Calculator{public static double GetCircleArea(double r){return Math.PI * r * r;}public static double GetCylinderVolume(double r,double h){double a = GetCircleArea(r);return a * h;}public static double GetConeVolume(double r,double h){double cv = GetCylinderVolume(r, h);return cv / 3;}}}
