ZHCADC4A September 2011 – March 2014
大于 64 位的结构体(包括类)和联合体通过引用进行传递和返回。
若要通过引用传递结构体或联合体,调用方需将其地址放置在适当的位置:根据其在实参列表中的位置,放在寄存器中或栈中。为了保留值传递语义(C 和 C++ 的要求),被调用者可能不修改指向对象;它必须制作自己的拷贝。
如果被调用的函数返回大于 64 位的结构体或联合体,调用者必须在 A3 中传递一个附加实参,其中包含返回值的目标地址,或者,如果未使用返回值,则返回 NULL。
被调用者通过将对象复制到 A3 中的地址(如果非零)来返回对象。如果需要,调用方负责分配存储器。通常,这涉及在栈上保存空间,但在某些情况下,可以传递已经存在的对象的地址,而无需分配。例如,如果 f 返回一个结构体,则可以通过在 A3 中传递 &s 来编译赋值 s = f()。