我应该选择“默认”吗?当我并不真正关心调用约定时,通过 __fastcall 调用约定?
我们有一个巨大的 C++ 代码库,其中包含大量 COM 对象。每个暴露给 COM 的函数都必须有 __stdcall 调用约定(通常是 STDMETHODCALLTYPE 宏),因此我…
vararg 函数如何找出机器代码中的参数数量?
像 printf 这样的可变参数函数如何找出它们获得的参数数量? 参数的数量显然不会作为(隐藏)参数传递(请参阅 在此处的 asm 示例中调用 printf)。 …
C# 中的 __fastcall 约定
考虑到: 微软特定 __fastcall 调用约定 指定函数的参数 将在寄存器中传递,当 可能的。下面的列表显示了 这个调用的实现 约定。 而且寄存器中的读/写…
检查函数指针类型的调用约定
如何在编译时检查函数指针是否具有 __stdcall 调用约定? 类似 void foo() {} static_assert(is_stdcall::value, "foo() must be stdcall"); 或至少 m…
MS Visual C++:什么时候应该关心使用调用约定?
在 C/C++ 中(具体来说,我使用的是 MSVS),在什么情况下需要担心为函数定义指定调用约定?它们重要吗?编译者是否能够在必要时选择最佳约定(即快速…
Scala 可以通过引用调用吗?
我知道 Scala 支持 ALGOL 的按名称调用,并且我想我明白这意味着什么,但是 Scala 可以像 C#、VB.NET 和 C++ 那样进行按引用调用吗?我知道 Java 不能…
为什么gcc使用movl而不是push来传递函数参数?
注意这段代码: #include void a(int a, int b, int c) { char buffer1[5]; char buffer2[10]; } int main() { a(1,2,3); } 之后: gcc -S a.c 该命令…
为什么 Windows64 使用与 x86-64 上所有其他操作系统不同的调用约定?
AMD 有一个 ABI 规范,描述了在 x86-64 上使用的调用约定。所有操作系统都遵循它,但 Windows 除外,它有自己的 x86-64 调用约定。为什么? 有谁知道…