对于带有签名的函数:
struct Pair { void *v1, *v2 };
void f(Pair p);
在 x64 上编译,我希望Pair
通过寄存器传递的字段,就好像函数是:
void f(void *v1, void *v2);
在 OSX 10.6 上使用 gcc 4.2.1 为 x86_64 编译测试,我可以通过检查反汇编看到这正是发生的情况。但是,在 Windows 上使用 MSVC 2008 for x64 编译时,反汇编显示它Pair
在堆栈上传递。我了解平台 ABI 可以阻止这种优化;有没有人知道任何 MSVC 特定的注释、调用约定、标志或其他可以使它工作的黑客?
谢谢!