繁体   English   中英

Windows 调用约定

[英]Windows calling conventions

嗨,所以一个朋友告诉我:

调用约定是 c++ function 说明符,用于确定调用另一个 function 的 function 是否应该清理堆栈帧,或者这将是被调用的 function 的工作

真的吗?

另外,清洁部分在系统调用 function 调用另一个系统调用时看起来如何?

提前致谢。

从历史上看,Fortran 和 Pascal 语言使用一种约定,调用者将其 arguments 压入堆栈(堆栈中的第一个参数在前),然后调用被调用者 function。被调用者中的序言代码通常弹出返回地址和参数,并且再次推送返回地址(这部分实际上是一个实现细节)。 当被调用者返回时,堆栈是干净的。

然后 C 语言能够调用 function,变量号为 arguments。约定是调用者以相反的顺序压入参数(堆栈中的最后一个参数在前),然后调用被调用者 function。被调用者然后访问堆栈中的参数而不弹出任何东西(第一个参数的地址就在返回地址附近)。 当被调用者返回时,堆栈中仍然包含参数,调用者应该清理它们。

这仍然在 Windows 系统中使用,其中大多数 API function 使用帕斯卡约定 ( winapi ) 而默认情况下 C 或 C++ 方法默认使用 8 cdecl约定

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM