好吧,最后让我们用C来实现,看看再能榨取多少性能。注意我没有改变算法,C的算法和之前的3种都是基本相同的:

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <stdbool.h>
  4. #include <math.h>
  5. #include <string.h>
  6. #include <time.h>
  7. #include <unistd.h>
  8. typedef unsigned long long ULL;
  9. //if failed return 0
  10. ULL sieve(ULL n)
  11. {
  12. char *a = malloc(n+1);
  13. if(!a) return 0;
  14. memset(a,0,n+1);
  15. ULL max = sqrtl(n);
  16. ULL p = 2;
  17. while(p <= max){
  18. for(ULL i=2*p;i<=n;i+=p)
  19. a[i] = 1;
  20. while(a[++p]); /* empty */
  21. }
  22. while(a[n]) n--;
  23. return n;
  24. }
  25. int main(int argc,char **argv)
  26. {
  27. ULL n = 0;
  28. if(argc < 2){
  29. printf("usage %s n\n",argv[0]);
  30. return 1;
  31. }
  32. sscanf(argv[1],"%llu",&n);
  33. if(n == 0){
  34. puts("wrong number format");
  35. return 2;
  36. }
  37. else if(n < 0){
  38. puts("must + number");
  39. return 3;
  40. }
  41. int start = clock();
  42. ULL result = sieve(n);
  43. if(!result){
  44. puts("sieve calc failed!");
  45. return 4;
  46. }
  47. double end = ((1.0 * (clock() - start)) / CLOCKS_PER_SEC) * 1000.0;
  48. printf("max p is %llu (take %f ms)\n",result,end);
  49. return 0;
  50. }

结果只比浏览器版的js稍慢一点,可见浏览器js优化的效果之好。不过C的计算非常稳定,不像浏览器中的js多次计算后性能急剧下降。

javascript、ruby和C性能一瞥(2)的更多相关文章

  1. javascript、ruby和C性能一瞥(1)

    测试一下本地js.浏览器中的js以及ruby对于类似算法的性能.结果有些意外:浏览器js最快,本地其次当相差很小:ruby最慢而且不是一个数量级的: 因为写的匆忙,可能有重大问题没能看出来,请各位高人 ...

  2. javascript、ruby和C性能一瞥(3) :上汇编

    在博文(1)和(2)里分别用了4中方式写一个素数筛选的算法,分别是javascript in browser.node.js.ruby和c:最终的结果是c最快,node.js其次,js in b虽然也 ...

  3. JavaScript数据存取的性能问题

    JavaScript中四种基本的数据存取位置: 字面量:只代表自身 字符串.数字.布尔值.对象.函数.数组.正则,以及null和undefined    快 本地变量:var定义的    快 数组元素 ...

  4. JavaScript代码规范和性能整理

    性能 Js在性能方面有多要注意的地方: 避免全局查找 Js性能优化最重要的就是注意全局查找,因为作用域的查找是先找局部作用域在没有找到之后在去上一级作用域查找直到全局作用域,所以全局作用域查找的性能消 ...

  5. (转)Javascript的DOM操作 - 性能优化

    转载:https://my.oschina.net/blogshi/blog/198910 摘要: 想稍微系统的说说对于DOM的操作,把Javascript和jQuery常用操作DOM的内容归纳成思维 ...

  6. JavaScript实现元素拖动性能优化

    前言:前几天没事干写了个小网站,打算用原生的javascript实现元素的拖动,但是事情并没有想象的那么顺利,首先是实现了拖动的元素卡的不能再卡,简直不能够,上图~~ 看见没?这就是效果,简直让人欲哭 ...

  7. javascript 作用域链及性能优化

    在JavaScript中,函数也是对象,实际上,JavaScript里一切都是对象.函数对象和其它对象一样,拥有可以通过代码访问的属性和一系列仅供JavaScript引擎访问的内部属性.其中一个内部属 ...

  8. 学习javascript总结下来的性能优化的小知识(一)

    http://www.cnblogs.com/ctriphire/p/4115525.html http://www.cnblogs.com/xjchenhao/archive/2012/10/22/ ...

  9. JavaScript 总结几个提高性能知识点

    前段时间花时间看了大半的<High Performance JavaScript>这本书啊,然后就开始忙项目了,庆幸最忙的一周已经熬过去了.由于空不出时间,这个月写的学习笔记也不多,忙完最 ...

随机推荐

  1. SQL语句容易出现错误的地方-连载

    1.语言问题 修改语言注册表\HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432\ORACLE\KEY_DevSuitHome1中的NLS_LANG修改为AMERICAN_AMER ...

  2. CUSTOM.PLL的使用

    在开发中对系统标准form的修改一般不建议修改系统原有FORM,对所需要修改的内容一般写在CUSTOM.PLL里即可,应为每个form运行的时候都会调用CUSTOM.PLL具体概念性东西可参考网上资料 ...

  3. UNIX网络编程——UNIX域套接字编程和socketpair 函数

    一.UNIX Domain Socket IPC socket API原本是为网络通讯设计的,但后来在socket的框架上发展出一种IPC机制,就是UNIX Domain Socket.虽然网络soc ...

  4. 修改Chrome默认的搜索引擎

    Chrome浏览器可谓是现在世界上最受欢迎的一款浏览器了,不仅仅是在其简单易用还有优雅的界面,还有与一众以人为本的设计理念,在我的眼里,匠心独具.但是咧,由于在国内谷歌是被禁止访问的,所以Chrome ...

  5. EBS开发技术之Patch安装

     Contents Document Control........................................................................ ...

  6. Java-IO之CharArrayWriter(字符数组输出流)

    CharArrayWriter用于写数据,数据单位是字符. (1) 通过CharArrayWriter()创建的CharArrayWriter对应的字符数组大小是32. (2) 通过CharArray ...

  7. const引用

    在C++中可以声明const引用 const Type& name = var: const引用让变量拥有只读属性 const int &a = b const int &a ...

  8. 如何在Cocos2D 1.0 中掩饰一个精灵(五)

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 掩饰和CCRenderTexture CCRenderTextu ...

  9. redis3.0.5在linux上安装与配置

    redis3.0.5在linux上安装与配置 rhel6/ubuntu14 1 下载 # wget http://download.redis.io/releases/redis-3.0.5.tar. ...

  10. Linux多线程实践(3) --线程属性

    初始化/销毁线程属性 int pthread_attr_init(pthread_attr_t *attr); int pthread_attr_destroy(pthread_attr_t *att ...