程序的调用堆栈是否取决于OS和/或编程语言?

问题描述 投票:0回答:2

我知道调用堆栈在Linux IA32中具有明确定义的操作方式。调用堆栈的操作方式可能会从体系结构更改为另一种体系结构。但这还取决于编程语言和操作系统吗?

operating-system stack programming-languages
2个回答
1
投票

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

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

"Call Stack"的Wikipedia文章解释了大多数调用堆栈包含的内容以及如何使用它们。

操作系统将适应CPU体系结构通过编写它们的编程语言。用汇编语言编写的OS部件可能会使用该体系结构的约定。


0
投票

调用堆栈的内容可能因语言而异。例如,某些语言按从右到左的顺序推送参数,而其他语言则按从右到左的顺序推送参数。一些依赖于调用者在返回时清理堆栈,而另一些依赖于被调用者来完成它。

例如,考虑不同的x86 calling conventions

© www.soinside.com 2019 - 2024. All rights reserved.