据我了解Windows中的x64调用约定(基于this和this):
个别参数如何对齐?由于我找不到任何专门针对此问题的内容,并且基于我认为x86中的对齐方式,我假设32位整数可以在4字节边界处对齐。因此,例如,如果函数参数5和6都是32位整数,我会期望它们处于堆栈偏移32和36.然而,从查看我的编译器的汇编输出,它们处于偏移32和40 (即,它们是8字节对齐的,即使它们占用4个字节)。
换句话说,为什么以下函数调用在x64中工作,即使它在预期32位整数时传递64位uint64_t
?
int i = 1;
uint64_t p = 6;
double v = 2.5;
printf("%i %.*f\n%i %.*f\n", i, p, v, i, p, v);