【发布时间】:2014-02-20 00:08:41
【问题描述】:
我在 Objective-C 中有这些功能:
-(void)emptyFunction
{
NSTimeInterval startTime = [[NSDate date] timeIntervalSinceReferenceDate];
float b;
for (int i=0; i<1000000; i++) {
b = [self returnNr:i];
}
NSTimeInterval endTime = [[NSDate date] timeIntervalSinceReferenceDate];
double elapsedTime = endTime - startTime;
NSLog(@"1. %f", elapsedTime);
}
-(float)returnNr:(float)number
{
return number;
}
和
-(void)sqrtFunction
{
NSTimeInterval startTime = [[NSDate date] timeIntervalSinceReferenceDate];
float b;
for (int i=0; i<1000000; i++) {
b = sqrtf(i);
}
NSTimeInterval endTime = [[NSDate date] timeIntervalSinceReferenceDate];
double elapsedTime = endTime - startTime;
NSLog(@"2. %f", elapsedTime);
}
当我以任何顺序调用它们时,它会在控制台中打印以下内容:
2014-01-13 12:23:00.458 RapidTest[443:70b] 1. 0.011970
2014-01-13 12:23:00.446 RapidTest[443:70b] 2. 0.006308
这是怎么回事? sqrtf() 函数如何比只返回值的函数快两倍?我知道 sqrtf() 可以使用汇编语言等处理位,但比返回更快吗?怎么可能?
【问题讨论】:
-
我猜 sqrt() 函数是 C 级的,更接近系统,它使用寄存器数据类型。
-
一个区别是
emptyFunction和sqrtFunction是方法而不是函数,sqrt()是 C 级函数,就像AnoopVaidya所说的那样。方法与NOT函数有很大区别。
标签: objective-c performance sqrt