Skip to content

Commit

Permalink
Update appendix-b-red-zone.md
Browse files Browse the repository at this point in the history
  • Loading branch information
luojia65 committed Dec 7, 2019
1 parent 1df096f commit 8e3bf89
Showing 1 changed file with 3 additions and 3 deletions.
6 changes: 3 additions & 3 deletions appendix-b-red-zone.md
Expand Up @@ -10,9 +10,9 @@

![](https://os.phil-opp.com/red-zone/red-zone.svg)

这张图片展示了一个有`n`**局部变量**(local variable)的函数的栈帧。在进入函数时,两个**指令**(instruction)将栈指针调节到合适的位置,以便为**返回地址**(return address)和局部变量提供内存空间。
这张图片展示了一个有`n`**局部变量**(local variable)的函数的栈帧。在进入函数时,栈指针将被调节到合适的位置,以便为**返回地址**(return address)和局部变量提供内存空间。

红区被定义为调整过的栈指针下方128个字节的区域——函数将会使用这个区域,来存放一些无需跨越函数调用的临时数据。因此,在一些情况下,比如在小的**叶函数**(leaf function)[1]中,我们可以优化掉调整栈指针所需的两个指令
红区被定义为调整过的栈指针下方128个字节的区域——函数将会使用这个区域,来存放一些无需跨越函数调用的临时数据。因此,在一些情况下,比如在小的**叶函数**(leaf function)[1]中,我们可以优化掉调整栈指针所需的两条指令

然而,当**异常**(exception)或**硬件中断**(hardware interrupt)发生时,这种优化却可能产生严重的问题。为了理解这一点,我们假设,当某个函数正在使用红区时,发生了一个异常:

Expand All @@ -26,4 +26,4 @@ _译者注:红区的产生可能有一定的历史缘由,调整或禁用它

---

[1] **叶函数**(leaf function)指的是不调用其它函数的函数;可以理解为,是函数调用图的叶子节点。特别地,**尾递归函数**(tail recursive function)的尾部可以看作是叶函数。
[1] **叶函数**(leaf function)指的是不调用其它函数的函数;可以理解为,是函数调用图的叶子节点。特别地,**尾递归函数**(tail recursive function)的尾部可以看作是叶函数。

0 comments on commit 8e3bf89

Please sign in to comment.