据我所知,x64代码有两种可能的调用约定 -Microsoft x64和AMD64.
现在,gcc可以使用参数启动,如果我们使用调用约定-mregparm=0,这将不起作用。发生这种情况是因为约定要求对前 6 个变量使用寄存器(我不太确定为什么要这样做,但我怀疑它是由于可能存在堆栈安全问题而实现的)。AMD64AMD64
所以,这里有一个问题:
在按照约定编译使用时是否有一些像这样的严格规则(强制寄存器使用)?而且,如果是,如何在不破坏兼容性的情况下绕过它们?gccMicrosoft x64ABI