首页 > 解决方案 > 程序的调用堆栈是否因操作系统和/或编程语言而异?

问题描述

我了解调用堆栈在 linux IA32 中具有明确定义的操作方式。调用堆栈的操作方式可能会因架构而异。但它是否也依赖于编程语言和操作系统?

标签: operating-systemstackprogramming-languages

解决方案


首选的 CPU 级调用堆栈取决于体系结构。从历史上看,CPU 具有支持堆栈的指令,这些堆栈可以增长到更低或更高的内存地址,并且堆栈的内容随架构和编程语言而变化。

编译为机器代码的编程语言可能会使用 CPU 支持的调用堆栈。但是任何给定的编程语言都可以选择使用哪个堆栈,如何使用它,在那里放置什么,甚至哪个上下文负责从堆栈中弹出(“调用约定”)。

“调用堆栈”的 Wikipedia 文章解释了大多数调用堆栈包含的内容以及它们的使用方式。

操作系统将通过编写它们的编程语言来适应 CPU 架构(C很常见,但也有其他的)。用汇编语言编写的操作系统部件可能会使用架构的约定。


推荐阅读