CSharp之堆栈
程序运行时的内存结构
程序运行时分为三个部分
- 托管堆--------用来存放引用类型对象
- 调用堆栈------用来存放有序的调用方法及值类型和指针
- 计算堆栈------指令运算时的堆栈
IL语言中的调用堆栈过程
1 | class Program |
IL代码如下所示
接下来逐步解析
步骤序号 | 指令 | 描述 |
---|---|---|
IL_0000 | nop | 不作任何处理 |
IL_0001 | ldc.i4.2 | 在计算堆栈上开辟4位空间存放数植2 |
IL_0002 | stloc.0 | 将计算堆栈上的值推送到调用栈的参数0位置 |
IL_0003 | ldc.i4.3 | 在计算堆栈上开辟4位空间存放数植3 |
IL_0004 | stloc.1 | 将计算堆栈上的值推送到调用栈的参数1位置 |
IL_0005 | ldloc.0 | 将调用栈上0位置的值复制到计算堆栈 |
IL_0006 | ldloc.1 | 将调用栈上0位置的值复制到计算堆栈 |
IL_0007 | call | 使计算堆栈上的值作为参数调用相加方法 |
IL_000c | stloc.2 | 将计算堆栈上的值推动到调用栈的参数2位置 |
IL_000d | ret | 返回 |