Yuv*_*mon 5 c programming-languages
我读到动态链接指向前一个激活记录,因此在动态范围编程语言中是有意义的.但是在静态范围编程语言中,为什么访问链接(指向一个较低嵌套级别的功能的激活记录)是不够的?特别是在C中 - 为什么不需要访问链接?为什么需要动态链接?
我将使用我更熟悉的术语:
\n\n\n激活记录:堆栈帧
\n动态链接:[保存]帧指针
\n
所以,我将你的问题解释为:为什么需要帧指针?[1]
\n不需要帧指针。
\n某些编译器(例如 Green Hills C++、带有 -O2 的 GCC)通常不生成它,或者可以要求不生成它(MSVC、GCC)。
\n也就是说,它当然有它的好处:
\n更容易的代码生成:可以通过索引帧指针而不是不断变化的堆栈指针来引用堆栈变量。堆栈指针随着每次压入/弹出而变化,帧指针在函数内保持不变(在序言/结尾之间)
\n如果出现问题,可以使用帧指针来完成堆栈展开。这就是 Borland\xe2\x80\x99s 结构化异常处理 (SEH) 的工作原理。
\n缺点:
\n但正如您所注意到的,编译器可以生成完美的代码,而无需维护帧指针。
\n[1] 如果不是这个意思,请详细说明。
\n| 归档时间: |
|
| 查看次数: |
1007 次 |
| 最近记录: |