程序调用有两种方式,保存地址进行注册或将其保存在堆栈中。我读到过程调用的方式是特定于操作系统的。我想了解操作系统如何限制它。无法编译生成一个代码,该代码可以将地址保存在寄存器中并在以后加载,或者将其保存在堆栈中并在需要时弹出它? 只想在这里了解操作系统的作用。
谢谢。
答案 0 :(得分:1)
操作系统没有任何功能,除了操作系统自己的库可能使用特定的调用约定。编译器确定调用约定。它'不是特定于操作系统,而是特定于语言和编译器。
编程语言以不同的方式做事。例如,Ada和Pascal的嵌套过程需要在C和C ++中不需要的幕后传递给它们的上下文。
在过去,这有很多混乱。
到了1970年代后期,VMS操作系统定义了一个调用约定,并且供应商制作的所有编译器都遵守了它。这使得Fortran可以调用Pascal来调用C来调用Fortran。然而,即使在那里,事情也不是100%透明的。事实上,VMS编译器具有语言扩展,可以在其他语言中调用函数。在FORTRAN 77中,所有内容都通过引用传递。不得不调用C函数的扩展,期望通过值传递所有内容。