作为好奇心,我在目标C中进行了一次实验:
在开始实验之前我的假设是函数返回值应该花费更多时间(纳秒)而不是没有返回的函数。
两个函数具有相同的编号和相同的代码但只有一个返回值而另一个没有返回值。
-(void)methodNotReturningTheValue
{
//Some Codes + @""
}
-(NSString*)methodReturningTheValue
{
//Some Codes
return @"";
}
在调用该函数之前和之后以秒为单位显示时间。以下是结果: 例如:
调用前的时间methodNotReturningTheValue:1411033150.946451
致电之前的时间方法退货价值:1411033150.946978
methodReturningTheValue的时间差异(之前和之后):0.000527
致电之前的时间方法返回值:1411033150.947947
致电之前的时间方法退货价值:1411033150.948464
methodReturningTheValue:0.000517
的时间差异(之前和之后)结果不包括在内。有时通过methodreturningvalue消耗的时间更长,并且有时methodNotReturning值更大。可能是[[NSDate date] timeIntervalSince1970]的工作波动;不允许实验计算函数返回所消耗的时间而不返回值。
我发现无关紧要或任何解决这种好奇心的方向或解决方案: 我的查询:如何在任何语言中显示函数返回值和函数之间的性能差异而没有任何返回(Void)?
谢谢!
答案 0 :(得分:1)
从方法返回的值存储在寄存器中(至少在ARM下并且<= 16字节;请参阅this question的接受答案)并且因此当引用时方法之间的差异无关紧要归还。
另一方面,返回struct
的方法更具相关性,因为必须将struct
复制回调用者。