美文网首页
十八. 函数的栈帧

十八. 函数的栈帧

作者: mkb2 | 来源:发表于2017-05-20 22:11 被阅读97次
使用64位系统执行这个函数 反汇编看看他的内部 //test调用或者不调用

如果不调用,那么64位系统设置局部变量的时候,将局部参数压入栈,不会像8086一样,修改sp的值,调用的时候直接使用bp-2,-4等操作;
疑惑:有可能-2,-4会不会被别人调用这个空间?
答案是不会的,因为sum()中没有调用比的函数,所以不会的

如果调用了test(),那么sum()会自动的sp-2,向8086看齐,自动分配一个空间,给局部变量使用;这个是编译器的一个优化,非常的好,节省内存空间


sp的站平衡使用的是内或者外平栈 经典的8086函数中调用其他函数,如果还有另一个函数,接着往上走 8086的栈祯

栈帧是sp和bp直接的东西,但是64位系统中的参数放到了寄存器中,并且内部没有调用函数,sp=bp,就没有栈帧;

test不调用其他的函数示意图 栈帧 test销毁了,sum的栈帧图

相关文章

  • 十八. 函数的栈帧

    如果不调用,那么64位系统设置局部变量的时候,将局部参数压入栈,不会像8086一样,修改sp的值,调用的时候直接使...

  • 巧用函数栈实现栈的反转

    一、函数栈 函数的调用过程其实就是一个压栈的过程,在函数栈中,每个函数所占空间成为一个 栈帧。栈帧中保存着函数的形...

  • 栈帧与函数调用流程(内存)---- 8086处理器

    栈帧:一个函数执行的环境,一个栈帧代表一个函数 栈帧结构: 一组栈帧寄存器-->SP局部变量bp以前的值-->BP...

  • 宏、普通函数、内联函数之间的区别

    普通函数 调用时向栈中push函数帧,调用结束后pop函数帧。编译器会在函数调用语句的前后,插入入栈和出栈的辅助代...

  • 5. linux下的栈帧分析

    @toc 1.linux下的栈帧分析2. 栈帧 1. 栈帧 每一次函数的调用,都会在调用栈上维护一个独立的栈帧(s...

  • Python 函数的执行流程-函数递归-匿名函数-生成器

    1 函数的执行流程 函数的执行需要对函数进行压栈的,什么是压栈呢,简而言之就是在函数执行时在栈中创建栈帧存放需要变...

  • C 与汇编程序的约定调用

    1.说明 函数调用时通过栈帧来实现的,栈帧是指为一个单独的函数调用单独分配的那部分栈空间。当运行中的程序调用另一个...

  • 打印函数调用堆栈

    相关函数签名 backtrace():栈回溯,保存各个栈帧的地址。该函数用于获取当前线程的函数调用堆栈,获取的信息...

  • 8086汇编(18)栈帧

    栈帧 1、栈帧(Stack Frame Layout) 就是一个函数执行的环境 包括:参数、局部变量、返回地址等1...

  • 8086汇编三——AT&T栈帧-汇编C混编

    什么叫栈帧?就是函数的调用环境。bp和sp中间那一段就是函数调用环境。 在AT&T环境下栈帧是有点不一样的: 1、...

网友评论

      本文标题:十八. 函数的栈帧

      本文链接:https://www.haomeiwen.com/subject/ytnpxxtx.html