(C语言底层逻辑)函数栈帧的创建和销毁讲解

简介: (C语言底层逻辑)函数栈帧的创建和销毁讲解

一函数栈帧的创建


1.寄存器


函数栈帧


ebp,esp 这两个寄存器中存放的是地址,这2个地址是用来维护函数栈帧的。


每一个函数调用,都要在栈区创建一个空间。


每一个值都是通过压栈的方法由高地址往低地址存储。


1669391500115.jpg


esp:栈顶指针   ebp:栈低指针


push:    压栈:给栈顶放一个元素


pop:      出栈:从栈顶删除一个元素


1669391509685.jpg


内存中栈帧的初始化为 cc cc cc cc


                                     cc cc cc cc~~


所以在发生越界或其他操作时,运行会出现 烫烫烫~~


函数调用是结束后怎么返回的?


如Add函数的返回值在销毁前会返回一个值,放在一个寄存器中,这个寄存器会将该值压在main函数下面

相关文章
|
6月前
|
存储 安全 C语言
深度剖析c语言程序 -- 函数栈帧的创建和销毁(纯肝货)-2
深度剖析c语言程序 -- 函数栈帧的创建和销毁(纯肝货)-2
|
6月前
|
存储 编译器 C语言
深度剖析c语言程序 -- 函数栈帧的创建和销毁(纯肝货)-1
深度剖析c语言程序 -- 函数栈帧的创建和销毁(纯肝货)-1
|
2月前
|
C语言
C语言判断逻辑的高阶用法
在C语言中,高级的判断逻辑技巧能显著提升代码的可读性、灵活性和效率。本文介绍了六种常见方法:1) 函数指针,如回调机制;2) 逻辑运算符组合,实现复杂条件判断;3) 宏定义简化逻辑;4) 结构体与联合体组织复杂数据;5) 递归与分治法处理树形结构;6) 状态机管理状态转换。通过这些方法,可以更高效地管理和实现复杂的逻辑判断,使代码更加清晰易懂。
229 88
|
1月前
|
编译器 C语言 C++
【C语言】精妙运用内存函数:深入底层逻辑的探索
【C语言】精妙运用内存函数:深入底层逻辑的探索
|
3月前
|
存储 C语言
【C语言】——函数栈帧的创建与销毁
【C语言】——函数栈帧的创建与销毁
|
5月前
|
C语言
C语言逻辑操作符的短路问题
C语言逻辑操作符的短路问题
|
5月前
|
编译器 C语言
C语言学习记录——操作符详解知识点选记(算术操作符、单目操作符、移位操作符、关系操作符、逻辑操作符、条件操作符......)二
C语言学习记录——操作符详解知识点选记(算术操作符、单目操作符、移位操作符、关系操作符、逻辑操作符、条件操作符......)二
49 3
|
5月前
|
存储 编译器 C语言
C语言学习记录——操作符详解知识点选记(算术操作符、单目操作符、移位操作符、关系操作符、逻辑操作符、条件操作符......)一
C语言学习记录——操作符详解知识点选记(算术操作符、单目操作符、移位操作符、关系操作符、逻辑操作符、条件操作符......)一
40 1
|
5月前
|
C语言
C语言中的赋值运算、比较运算和逻辑运算详解
C语言中的赋值运算、比较运算和逻辑运算详解
|
6月前
|
C语言
C语言中的逻辑运算符和逻辑表达式
C语言中的逻辑运算符和逻辑表达式
133 0