OC中指针运算效率(原创)

2017-01-19  本文已影响0人  xiangshun

我其实对C跟Objective-C都不太了解,我知道OC是C的超集,那么C中很多语法跟逻辑按道理来说都可以在OC来写。

回到正题,比如有这样一个运算场景,有一个数组,里面有上亿个数据,需要逐一对里面的数据进行运算,现在用常规逻辑来试试:

NSMutableArray *ary=[NSMutableArray new];
NSInteger len=100000000;
for (int i=0; i<=len; i++) {
    [ary addObject:@(i)];
}
NSTimeInterval interval = [[NSDate date] timeIntervalSince1970];
double total=0;
for (int n=0; n<len; n++) {
    total+=[ary[n] intValue];
}
NSLog(@"===:%f",total);
NSTimeInterval interval2 = [[NSDate date] timeIntervalSince1970];
NSLog(@"===interval2-interval:%f",(interval2-interval));

运行输出:

 ===:4999999950000000.000000
 ===interval2-interval:3.026512

我电脑是13寸MAC,CPU是2.9GHz intel core i5,我运行了几次,结果都是在3秒左右。

然后我们换成指针运算的方式:

NSMutableArray *ary=[NSMutableArray new];
NSInteger len=100000000;
for (int i=0; i<=len; i++) {
    [ary addObject:@(i)];
}
NSTimeInterval interval = [[NSDate date] timeIntervalSince1970];
double total=0;
void *pe=(__bridge void*)nm;
for (int n=0; n<len; n++) {
    total=total+[(__bridge_transfer id)pe intValue];
    pe+=16;
}
NSLog(@"===:%f",total);
NSTimeInterval interval2 = [[NSDate date] timeIntervalSince1970];
NSLog(@"===interval2-interval:%f",(interval2-interval));

输出:

 ===:4999999950000000.000000
 ===interval2-interval:1.125193

也是运行了好几次,都是在1.1秒左右。

想想看,3秒跟1秒,这个在计算机里面可以说是天壤之别吧,值得我们思考。~

上一篇 下一篇

猜你喜欢

热点阅读