【发布时间】:2013-09-17 02:34:36
【问题描述】:
为了实现类似 C# 的调用方法,我需要将 C++ 代码与程序集结合起来。但是当我将浮点数传递给它时遇到了麻烦,发现这些参数是通过一些浮点指令传递的。
那么有什么办法可以强制 g++ 使用公共堆栈(esp)?谢谢。
【问题讨论】:
-
它们不是在堆栈上传递,而是在寄存器上传递吗?
-
@PetrBudnik,这取决于您的 ABI 和调用约定。大多数 x86 ABI 在 FPU 堆栈上传递它们。大多数 x86_64 ABI 在 SSE 寄存器中传递它们。
-
另外,这有点像XY problem。如果您可以提供更多上下文,很可能会有一个更简单的解决方案。
-
@zneak 但是如果我获取传递变量的地址?编译器必须将其溢出到堆栈中。
-
@PetrBudnik,我不确定我是否理解你的话。如果您确定获得其地址,则该变量必须存在于可寻址内存中,但这与调用约定无关。发出函数调用时,编译器并不关心变量是否存在于堆栈中:它需要以已知的方式传递值,以便被调用的函数可以检索它。