File tree Expand file tree Collapse file tree 1 file changed +3
-3
lines changed Expand file tree Collapse file tree 1 file changed +3
-3
lines changed Original file line number Diff line number Diff line change 10
10
11
11
![ ] ( https://os.phil-opp.com/red-zone/red-zone.svg )
12
12
13
- 这张图片展示了一个有` n ` 个** 局部变量** (local variable)的函数的栈帧。在进入函数时,两个 ** 指令 ** (instruction)将栈指针调节到合适的位置 ,以便为** 返回地址** (return address)和局部变量提供内存空间。
13
+ 这张图片展示了一个有` n ` 个** 局部变量** (local variable)的函数的栈帧。在进入函数时,栈指针将被调节到合适的位置 ,以便为** 返回地址** (return address)和局部变量提供内存空间。
14
14
15
- 红区被定义为调整过的栈指针下方128个字节的区域——函数将会使用这个区域,来存放一些无需跨越函数调用的临时数据。因此,在一些情况下,比如在小的** 叶函数** (leaf function)[ 1] 中,我们可以优化掉调整栈指针所需的两个指令 。
15
+ 红区被定义为调整过的栈指针下方128个字节的区域——函数将会使用这个区域,来存放一些无需跨越函数调用的临时数据。因此,在一些情况下,比如在小的** 叶函数** (leaf function)[ 1] 中,我们可以优化掉调整栈指针所需的两条指令 。
16
16
17
17
然而,当** 异常** (exception)或** 硬件中断** (hardware interrupt)发生时,这种优化却可能产生严重的问题。为了理解这一点,我们假设,当某个函数正在使用红区时,发生了一个异常:
18
18
@@ -26,4 +26,4 @@ _译者注:红区的产生可能有一定的历史缘由,调整或禁用它
26
26
27
27
---
28
28
29
- [ 1] ** 叶函数** (leaf function)指的是不调用其它函数的函数;可以理解为,是函数调用图的叶子节点。特别地,** 尾递归函数** (tail recursive function)的尾部可以看作是叶函数。
29
+ [ 1] ** 叶函数** (leaf function)指的是不调用其它函数的函数;可以理解为,是函数调用图的叶子节点。特别地,** 尾递归函数** (tail recursive function)的尾部可以看作是叶函数。
You can’t perform that action at this time.
0 commit comments