none
栈帧 stackframe RRS feed

  • 问题

  • 栈帧  stackframe  代表的是当前线程的调用栈中的一个方法调用,在执行线程的过程中进行的每个方法调用都会在调用栈中创建并压入一个stackframe

    这个栈帧 到底是个什么东西,在线程起到的是什么作用啊,这个该这么理解啊?

    2011年4月13日 15:03

答案

  • 首先您要知道 Thread Stack。

    应用程序起来后,线程是其最小的执行单元,进程、模块等都是一些非执行单位。所以,当线程执行时,Windows 会为它们创建基于上下文的线程栈。在线程栈中,包含一些线程上下文信息,如返回地址,参数表,本地变量等。然后,这个线程栈中的代码会被顺序执行。这里每一次执行的代码就构成一个 Stackframe。

    直观的理解,就是像视频文件。视频文件对应一个线程栈,视频文件的每一帧对应于 Stackframe。理论上,Stackframe 对应于对 Thread Stack 的每一次 Push/Pop 操作。


    Mark Zhou
    2011年4月14日 9:09
  • 线程不是最小单元,你说的是进程,线程,应用程序域的关系。

    栈帧是线程的执行单位。其它没有说明。


    胡超
    2011年4月14日 13:39
  • 首先您要知道 Thread Stack。

    应用程序起来后,线程是其最小的执行单元,进程、模块等都是一些非执行单位。所以,当线程执行时,Windows 会为它们创建基于上下文的线程栈。在线程栈中,包含一些线程上下文信息,如返回地址,参数表,本地变量等。然后,这个线程栈中的代码会被顺序执行。这里每一次执行的代码就构成一个 Stackframe。

    直观的理解,就是像视频文件。视频文件对应一个线程栈,视频文件的每一帧对应于 Stackframe。理论上,Stackframe 对应于对 Thread Stack 的每一次 Push/Pop 操作。


    Mark Zhou

    你好  问一下  你这里的push/pop压入和弹出的意思就是我上面说的展开的意思吗?展开就是弹出的意思对吧?


    线程没有传说是的push和pop。跟这些没有关系。

    最重要的是每个线程执行的堆栈及方法表的执行情况及生成状态。


    胡超
    2011年4月14日 13:40
  • 每个线程执行过程这中就是用栈帧分别其它线程的执行


    胡超
    2011年4月14日 13:42

全部回复

  • 栈帧是一个单元
    胡超
    2011年4月13日 22:55
  • 压入栈帧是线程的单元值,是线程的执行,可以标记线程执行的位置。


    胡超
    2011年4月13日 23:03
  • 哦  这样啊,书上有一点写到:方法的栈帧会展开(unwind),这个又是什么意思啊?
    2011年4月14日 1:32
  • 个人理解

    线程的执行,栈帧状态


    胡超
    2011年4月14日 6:47
  • 首先您要知道 Thread Stack。

    应用程序起来后,线程是其最小的执行单元,进程、模块等都是一些非执行单位。所以,当线程执行时,Windows 会为它们创建基于上下文的线程栈。在线程栈中,包含一些线程上下文信息,如返回地址,参数表,本地变量等。然后,这个线程栈中的代码会被顺序执行。这里每一次执行的代码就构成一个 Stackframe。

    直观的理解,就是像视频文件。视频文件对应一个线程栈,视频文件的每一帧对应于 Stackframe。理论上,Stackframe 对应于对 Thread Stack 的每一次 Push/Pop 操作。


    Mark Zhou
    2011年4月14日 9:09
  • 首先您要知道 Thread Stack。

    应用程序起来后,线程是其最小的执行单元,进程、模块等都是一些非执行单位。所以,当线程执行时,Windows 会为它们创建基于上下文的线程栈。在线程栈中,包含一些线程上下文信息,如返回地址,参数表,本地变量等。然后,这个线程栈中的代码会被顺序执行。这里每一次执行的代码就构成一个 Stackframe。

    直观的理解,就是像视频文件。视频文件对应一个线程栈,视频文件的每一帧对应于 Stackframe。理论上,Stackframe 对应于对 Thread Stack 的每一次 Push/Pop 操作。


    Mark Zhou

    你好  问一下  你这里的push/pop压入和弹出的意思就是我上面说的展开的意思吗?展开就是弹出的意思对吧?
    2011年4月14日 9:30
  • 线程不是最小单元,你说的是进程,线程,应用程序域的关系。

    栈帧是线程的执行单位。其它没有说明。


    胡超
    2011年4月14日 13:39
  • 首先您要知道 Thread Stack。

    应用程序起来后,线程是其最小的执行单元,进程、模块等都是一些非执行单位。所以,当线程执行时,Windows 会为它们创建基于上下文的线程栈。在线程栈中,包含一些线程上下文信息,如返回地址,参数表,本地变量等。然后,这个线程栈中的代码会被顺序执行。这里每一次执行的代码就构成一个 Stackframe。

    直观的理解,就是像视频文件。视频文件对应一个线程栈,视频文件的每一帧对应于 Stackframe。理论上,Stackframe 对应于对 Thread Stack 的每一次 Push/Pop 操作。


    Mark Zhou

    你好  问一下  你这里的push/pop压入和弹出的意思就是我上面说的展开的意思吗?展开就是弹出的意思对吧?


    线程没有传说是的push和pop。跟这些没有关系。

    最重要的是每个线程执行的堆栈及方法表的执行情况及生成状态。


    胡超
    2011年4月14日 13:40
  • 每个线程执行过程这中就是用栈帧分别其它线程的执行


    胡超
    2011年4月14日 13:42