深度解剖c语言(函数栈帧)

1.内存结构

数据在内存中存储是低地址到高地址的
依次为代码区,字符常量区,已初始化的全局变量区,未初始化的,堆区,栈区
栈区和堆区是相向增长的,其中栈区数据高->低

深度解剖c语言(函数栈帧)_第1张图片

2.认识相关寄存器

深度解剖c语言(函数栈帧)_第2张图片

3.函数栈帧

main函数也是函数,也会创建函数栈帧
高级语言->汇编语言->机器语言,从汇编的角度分析

深度解剖c语言(函数栈帧)_第3张图片
深度解剖c语言(函数栈帧)_第4张图片

4.main函数栈帧分析

ebp-8,证明栈帧是高向低地址存储
eax说明数据临时拷贝到寄存器

深度解剖c语言(函数栈帧)_第5张图片
深度解剖c语言(函数栈帧)_第6张图片

临时拷贝:
1.临时拷贝的形成是在函数正式被调用之前就形成了的
2.形参实例化的顺序是从右到左的 ,Myadd(int a, int b)先b后a

深度解剖c语言(函数栈帧)_第7张图片

5.Myadd函数栈帧

函数的栈帧是自己形成的。
减多少是谁决定?编译器
因为数据有类型,编译器是根据类型对应的变量分配

深度解剖c语言(函数栈帧)_第8张图片

调用函数return返回到哪里?
寄存器,返回给函数调用方

深度解剖c语言(函数栈帧)_第9张图片

总结

深度解剖c语言(函数栈帧)_第10张图片

你可能感兴趣的:(c,c语言,开发语言)