在 C# 中,通常以相当客观的方式编写,如下所示:
MyObj obj = new MyObj();
MyReturn ret = obj.DoSomething();
AnotherReturn rett = ret.DoSomethingElse();
我可以像这样写上面的:
AnotherReturn rett = new MyObj().DoSomething().DoSomethingElse();
但是,当您按这样的顺序有一堆函数调用时,stackframe 是如何工作的?这个例子相当简单,但想象一下,如果我有 50 多个函数调用被链接起来(这可能发生在 JavaScript (/w jQuery) 之类的地方)。
我的假设是,对于每个函数调用,都会生成一个返回地址(到“点”?),然后返回值(具有其他方法的新对象)立即被泵入该返回地址的下一个函数调用。这个工作如何获得整体返回值(在本例中,返回地址将最终函数值分配给 rett)?如果我继续链接调用,我最终会溢出吗?在这种情况下,采取客观路线是否被认为更明智(以“不必要的”内存分配为代价?)。