栈帧——函数的调用过程

原创 2018年04月15日 16:46:51

> 什么是栈帧

> 栈帧详解

一、什么是栈帧
定义: 栈帧也叫过程活动记录,是编译器用来实现过程/函数调用的一种数据结构。
每一次函数调用都是一个过程,这个过程要为函数开辟空间、分配地址,用于本次函数的调用中临时变量的保存和传递。这块空间我们就称为函数栈帧。

二、栈帧详解

以一个简单代码为例:
这里写图片描述

转到反汇编:

这里写图片描述

1.main函数的栈帧分配前:
这里写图片描述

__tmainCRTStartup是调用main函数之前需要调用的
edp存放了指向函数栈帧栈底的地址
esp存放了指向函数栈帧栈顶的地址

2.main函数的栈帧分配
这里写图片描述

3.Add函数的调用过程
汇编代码:
这里写图片描述

栈帧创建过程:
这里写图片描述

4.函数结束过程:
这里写图片描述

出栈时会销毁所创建的临时空间。

函数调用过程原理及栈帧分析

一、栈帧 栈帧:“栈帧也叫过程活动记录,是编译器用来实现过程/函数调用的一种数据结构。 实际上,可以简单理解为:栈帧就是存储在用户栈上的(当然内核栈同样适用)每一次函数调用涉及的相关信息的记录单元...
  • yangle4695
  • yangle4695
  • 2016-08-09 22:34:52
  • 492

【C】函数的调用过程,栈帧的创建和销毁

每一次函数调用都是一个过程,这个过程我们称之为:函数的调用过程。 函数调用过程要为函数开辟栈空间,用于本次函数的调用中临时变量的保存、现场保护。这块栈空间我们称之为函数栈帧。 栈帧的维护需要我们了解e...
  • qq_37924645
  • qq_37924645
  • 2017-04-23 16:33:43
  • 159

函数调用栈帧过程带图详解

这里,我们来研究如下代码的栈帧过程。为了初学者理解汇编指令,所以编译环境是在vc++6.0下#include #includeint sum(int _a,int _b) { int c=0;...
  • IT_10
  • IT_10
  • 2016-10-31 22:29:29
  • 2200

栈帧 - 理解C函数调用过程

每天进步一点点。 若萌新总结有误,望牛人不吝赐教。 >_ 在c程序中当计算机遇到某一个函数时,它就会跳转过去执行这个函数,执行完毕后接着再去执行下一条函数(指令)。在执行调用函数的过程中,计算...
  • jelly_9
  • jelly_9
  • 2016-11-20 17:55:49
  • 1449

C++基础知识:c 函数调用过程原理及函数栈帧分析

1.关于栈   首先必须明确一点也是非常重要的一点,栈是向下生长的,所谓向下生长是指从内存高地址->地地址的路径延伸,那么就很明显了,栈有栈底和栈顶,那么栈顶的地址要比栈底低。对x86体系的CPU而...
  • zz460833359
  • zz460833359
  • 2015-10-07 10:08:39
  • 1013

函数的栈帧创建与销毁

#include #include int Add(int x, int y) { int z = 0; z = x + y; return z; } int main() { int a =...
  • baidu_37964044
  • baidu_37964044
  • 2017-08-07 22:43:22
  • 246

函数的调用(栈帧的创建和销毁)

以下面这段代码为例:  #include int fun(int x, int y) {     int z = 0;      z = x + y;     return z; }...
  • weixin_40909099
  • weixin_40909099
  • 2017-12-04 09:37:50
  • 25

关于C函数的调用过程-栈帧

关于栈帧,从逻辑上讲,栈帧就是一个函数执行的环境:函数参数、函数的局部变量、函数执行完后返回到哪里等等。 首先应该明白,栈是从高地址向低地址延伸的。每个函数的每次调用,都有它自己独立的一个栈帧,这个...
  • qq_26768741
  • qq_26768741
  • 2016-04-15 20:52:45
  • 1298

堆栈、栈帧、函数调用过程

一、堆和栈首先,栈是从高地址向低地址延伸的。每个函数的每次调用,都有它自己独立的一个栈帧,这个栈帧中维持着所需要的各种信息。程序对内存的使用分为以下几个区:(1)栈区(stack):由编译器自动分配和...
  • will130
  • will130
  • 2015-10-26 14:11:35
  • 595

浅谈栈帧

一、 什么是栈帧? 什么是栈帧,首先引用百度百科的经典解释:“栈帧也叫过程活动记录,是编译器用来实现过程/函数调用的一种数据结构。 实际上,可以简单理解为:栈帧就是存储在用户栈上的(当然内核栈同样适...
  • qq_25253287
  • qq_25253287
  • 2016-06-10 10:07:13
  • 6772
收藏助手
不良信息举报
您举报文章:栈帧——函数的调用过程
举报原因:
原因补充:

(最多只允许输入30个字)