在 C++ 中,成员函数最多可以有 2 个隐式参数:this
指针和返回对象的地址。它们位于显式参数之前,但是:哪个先走?
我特别对 Android NDK(基于 gcc,ARM)中发生的情况感兴趣。
Example:
class MyClass {
public:
int a,b;
MyClass(int aa,int bb):a(aa),b(bb){};
MyClass modif(int da, int db) {return MyClass(a+da,b+db);} //an object is returned
};
您似乎在询问调用约定(在分支到函数之前注册/在堆栈上存储参数和返回值的位置)。
这取决于a lot即便如此,它也相当复杂。对于 ARMv5/6/7,过程调用标准 [pdf] http://infocenter.arm.com/help/topic/com.arm.doc.ihi0042e/IHI0042E_aapcs.pdf是你的圣经。
如果您真的关心的话,您应该真正阅读整篇文章,但以下是您感兴趣的部分:
- r0 中返回不大于 4 字节的复合类型。
- A Composite Type larger than 4 bytes, or whose size cannot be determined statically by both caller and callee, is stored in memory at an address passed as an extra argument when the function was called.
- 如果子例程是一个在内存中返回结果的函数,则将结果的地址放在
在 r0 中,NCRN 设置为 r1。
- 如果参数的字大小不大于 r4 减去 NCRN,则将参数复制到
核心寄存器,从 NCRN 开始
Also
- 对于 C++,隐式
this
参数作为额外参数传递,紧接在第一个用户参数之前。
所以大多数情况下返回的复合值的地址在$r0
和隐含的this
指针在$r1
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)