• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

开心小市民

十年饮冰,不凉热血
  • 博客园
  • 管理

公告

View Post

栈

栈

栈是一种典型的后进先出(last in first out)的数据结构,其操作主要有压栈(push)和进栈(pop)两种操作。如图。两种操作都操作栈顶,不能直接操作栈底。

高级语言在运行时都会转换为汇编程序,在汇编程序运行过程中,充分的利用了这一数据结构。每个程序在运行时都有虚拟地址空间,其中一部分就是该程序对应的栈,用于保存函数调用信息和局部变量。此外常见的操作也是压栈和出栈。需要注意的是,程序的栈是从进程地址空间的高地址向低地址增长的。

需要注意的是:32位和64位程序有一些简单的区别:

1、x86 函数参数在函数返回地址的上方。
2、x64 system v amd64 abi 等前六个整型或指针参数依次保存在 RDI,RSI,RDX,RCX,R8,R9寄存器中如果还要更多的参数的话才会保存在栈上。
3、内存地址不能大于0x00007FFFFFFFFFFF,6个字节长度,否则会抛出异常。

c语言函数调用栈(一)

posted on 2021-11-22 10:11  开心小市民  阅读(57)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3