C++ 在C和C+的上下文中,激活记录是什么+;?
对于C/C++程序员来说,了解它意味着什么以及了解它有多重要 至少在概念上,不同平台的情况是否相同 我把它理解为一块分配的内存,用来存储函数的局部变量 <> >我想知道更多的是< P/> < P>激活记录不是一个在C语言或C++语言中使用最多的概念。激活记录的格式非常特定于平台C++ 在C和C+的上下文中,激活记录是什么+;?,c++,c,C++,C,对于C/C++程序员来说,了解它意味着什么以及了解它有多重要 至少在概念上,不同平台的情况是否相同 我把它理解为一块分配的内存,用来存储函数的局部变量 >我想知道更多的是< P/> < P>激活记录不是一个在C语言或C++语言中使用最多的概念。激活记录的格式非常特定于平台 概念上,如何传递参数、局部变量的寿命、函数返回到响应堆栈的调用堆栈如何展开,都是C++的重要部分(除了C后面)。这些实现的细节将影响某个特定平台的激活记录,但在C++或C.< /P> < P>中编写代码通常不需要这样的知识。
概念上,如何传递参数、局部变量的寿命、函数返回到响应堆栈的调用堆栈如何展开,都是C++的重要部分(除了C后面)。这些实现的细节将影响某个特定平台的激活记录,但在C++或C.< /P> < P>中编写代码通常不需要这样的知识。激活记录是堆栈帧的另一个名称。它是构成调用堆栈的数据结构。它一般包括:
- 给被叫人打电话
- 回电地址
- 被调用方的参数
- 上一个堆栈指针(SP)值
不过,更一般地说,C/C++程序员可以在业余编程生涯中完成大部分工作,甚至不用考虑调用堆栈。激活记录包含以下三个方面 1.功能定义
2.变量定义
3.函数应用程序(函数调用)当我们调用函数时,我们需要一个地方来存储调用者和被调用者的上下文,这个地方被称为激活记录(又名堆栈帧) 是的,激活记录编写调用堆栈,但是,这并不意味着激活记录必须基于堆栈。它是特定于实现的 你可能想知道“有什么例子吗?”
- 当然,只要看看,堆栈不可用,它的激活记录是基于堆的李>
- 相反,还有一个平台不提供heap(又称heap less),例如(但它也意味着新的关键字和新表达式不能使用)李>
- 除了硬件限制外,一些函数式语言无法在堆栈上存储局部变量,因此它们的激活记录分配在堆上,如果您想知道原因,这是一个很好的参考李>
正如@FrakHB所说,不仅堆和堆栈,内存的其他区域也可以是激活记录,这就是特定于实现的的含义 又名stack frame-请看@Neil,你的评论应该是答案。当你有太多的评论时,他们会生成一个关于编程问题的非常酷的网站。事实上,他没有,但我不喜欢发布只包含wikipedia链接的答案。函数调用的框架不需要在stack中实现。ISO C和ISO C++都不提及“堆栈”,除了“ISO-C++”第15条中的“堆栈展开”,这基本上是“自动对象的LIFO破坏”,除了实现细节外,没有其他事情可做。调用堆栈实际上允许从堆或内存的其他区域分配,而不是从ISA特定的堆栈分配。@Alexandre Bell我从您提到的内容中了解到AR(堆栈帧)包含本地变量、ret地址和参数。我的问题是:被调用函数的代码存储在哪里?@FernandoGabrieli C中有不同的段,如代码段、堆栈段、堆段。因此,功能代码将存储在代码段上。参考