函数栈帧的创建和销毁——仅供欣赏

简介: 函数栈帧的创建和销毁——仅供欣赏

演示代码

#include <stdio.h>

int add(int x, int y)
{
  int z = 0;
  z = x + y;
  return z;
}
int main()
{
  int a = 10;
  int b = 20;
  int c=0;
  c = add(a, b);
  printf("%d\n", c);
  return 0;
}

esp,ebp两个寄存器

esp用来维护栈顶的指针

ebp用来维护栈顶的指针

从这里可以看出来,main函数是被mainCRTStartup函数调用的。

下面执行第一步,push ebp意思是向栈顶压入一个数值ebp

上面的这个就完成了main函数的栈帧,包括对变量a,b,c的开辟。

下面展示对add函数栈帧的开辟

下面这个是add函数的栈帧的销毁

最后这个是main函数的销毁

pop的意思是出栈。


相关文章
|
6月前
|
存储 安全 C语言
深度剖析c语言程序 -- 函数栈帧的创建和销毁(纯肝货)-2
深度剖析c语言程序 -- 函数栈帧的创建和销毁(纯肝货)-2
|
6月前
|
存储 编译器 C语言
深度剖析c语言程序 -- 函数栈帧的创建和销毁(纯肝货)-1
深度剖析c语言程序 -- 函数栈帧的创建和销毁(纯肝货)-1
|
程序员 编译器 C语言
细谈函数栈帧的创建与销毁
我们在写C语言代码时,经常会把一个独立的功能抽象为函数,所以C程序是以函数为基本单位的。那函数如何调用?函数的返回值如何返回的?函数参数是如何传递的?这些问题都与函数栈帧有关系。
182 0
|
6月前
|
存储 编译器
初识函数栈帧的创建与销毁(笔记)
初识函数栈帧的创建与销毁(笔记)
|
存储 缓存 编译器
函数栈帧的创建和销毁(纯干货值得一看附笔记下载链接)
函数栈帧的创建和销毁(纯干货值得一看附笔记下载链接)
|
存储 编译器 程序员
C语言代码函数栈帧的创建与销毁(修炼内功)
目录 在前期的学习中我们可能有很多困惑 例如:局部变量是怎么创建的 为什么局部变量的值是随机值 函数是怎么样传参的 传参的顺序是什么 形参和实参的关系是什么 函数调用是怎么做的 函数掉调用结束后怎么返回的 这篇博客我们来修炼自己的内功,掌握好这篇博客的大部分知识就已经很不错了 我们用到VS2013这个编译器,目的是为了看到更详细的函数封装内容 提示不要使用太过高级的编译器,因为越高级的编译器越不容易观察。同时这里需要注意的是在不同的编译器下,函数调用过程中栈帧的创建是略有差异的,不是完全相同的,具体细节取决于编译器
|
编译器 C语言
【函数栈帧的创建和销毁】(超详细图解)(上)
【函数栈帧的创建和销毁】(超详细图解)
102 0
【函数栈帧的创建和销毁】(超详细图解)(上)
函数栈帧的创建和销毁(图文详细)下
函数栈帧的创建和销毁(图文详细)下
69 0
|
编译器 C语言 容器
函数栈帧的创建和销毁(图文详细)上
函数栈帧的创建和销毁(图文详细)上
79 0
|
存储 编译器 C语言
函数栈帧的创建与销毁(反汇编万字讲解)
局部变量是怎么创建的? 为什么未初始化的局部变量的值是随机值? 函数是怎样传参的?传参的顺序是怎样的? 形参和实参是什么关系? 函数调用是怎样做的? 函数调用后是怎样返回的? 我们本章就来研讨这个问题,掌握了函数栈帧的创建和销毁更有利于后期的学习这里建议大家要从头往后一个内容一个内容看,因为这里每一个部分关联性很强!