changeset 1:9d6fb29e41ce

Objective-C IMPのベンチマークが抜けていたため、追加。
author "uncorrelated zombie" <uncorrelated@yahoo.co.jp>
date Tue, 15 Feb 2011 18:38:19 +0900
parents 2216535ade9c
children b99b69fd33aa
files Looping-IMP.M
diffstat 1 files changed, 49 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Looping-IMP.M	Tue Feb 15 18:38:19 2011 +0900
@@ -0,0 +1,49 @@
+#import <stdio.h>
+#import <objc/Object.h>
+#import <limits.h>
+#import <sys/time.h>
+
+@interface Looping : Object {
+  int n0;
+}
+- (id)init;
+- (int)calc:(int)n;
+@end
+
+@implementation Looping
+- (id)init{
+  [super init];
+  n0 = 0;
+  return self;
+}
+- (int)calc:(int)n {
+  int n1 = n0 + (1 - 2*(n%2));
+  n0 = n;
+  return n1;
+}
+@end
+
+double gettimeofday_sec()
+{
+  struct timeval tv;
+  gettimeofday(&tv, NULL);
+  return tv.tv_sec + (double)tv.tv_usec*1e-6;
+}
+
+int main(){
+  id o = [[Looping alloc] init];
+  int (*calc)(id,SEL,int);
+  SEL selector = @selector(calc:);
+/*  calc = (int (*)(id,SEL,int))objc_msg_lookup(o, selector); */
+  calc = (int (*)(id,SEL,int))[Looping instanceMethodFor:selector];
+  unsigned c;
+  int n = 1;
+  double t1, t2;
+  t1 = gettimeofday_sec();
+  for(c=0;c<INT_MAX;c++){
+    n = calc(o, selector, n);
+  }
+  t2 = gettimeofday_sec();
+  printf("%d\nObjective-C\t%f\n", n, t2 - t1);
+  return 0;
+}