免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: llslls_007
打印 上一主题 下一主题

请c++ 高手调优 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2010-08-06 20:52 |只看该作者
C/C++的“数组”,其实不能算数组。它是非常简陋的,连栅栏都没建,你自己不小心,就会跑出去。正因为简陋,系统开销就小得多,速度自然快了。
而list和vector,相比之下,是非常复杂的东西,开销自然大得多。
你比较的,首先不是语言,而是数据结构。

论坛徽章:
0
12 [报告]
发表于 2010-08-07 12:41 |只看该作者
你这是在欺负C++吗?好吧对于这个代码,把这段加上
  1. struct pool {
  2.     pool(){
  3.         heap = 0;
  4.         buf = malloc(10*1024*1024);
  5.         for(size_t i = 0; i < 10*1024*1024; i += 64){
  6.             put((size_t*)((char*)buf + i));
  7.         }
  8.     }
  9.     void* get(){
  10.         size_t* p = heap;
  11.         heap = (size_t*)*p;
  12.         return p;
  13.     }
  14.     void put(size_t* p){
  15.         *p = (size_t)heap;
  16.         heap = p;
  17.     }
  18.     ~pool(){
  19.         free(buf);
  20.     }
  21.     void* buf;
  22.     size_t* heap;
  23. } pool ;
  24. void* operator new(size_t size){
  25.     return pool.get();
  26. }
  27. void operator delete(void* p){
  28.     pool.put((size_t*)p);
  29. }
复制代码
去掉中间的输出,g++ -O3 毫秒数
C数组
9876543210
C [1014]

C++vector
9876543210
CPP [1061]

论坛徽章:
0
13 [报告]
发表于 2010-08-07 17:45 |只看该作者
回复 11# beepbug


    同意, 除了输出 ,算法运行时间倒是相差不大

   但是,printf 和 cout 相差太大了,请谈谈原因

论坛徽章:
0
14 [报告]
发表于 2010-08-07 17:53 |只看该作者
本帖最后由 llslls_007 于 2010-08-07 17:55 编辑

回复 12# zliming


   1. 对你认真,严谨的回复表示感谢,

  2. 不谈c/c++语言本身
  
  3. 算法运行时间相差不大,但是加上输出时间相差变大(输出重定向到文件),printf 和 cout i/o 效率应该不会这么大的,请不吝赐教?

论坛徽章:
0
15 [报告]
发表于 2010-08-07 18:30 |只看该作者
printf和 cout差别是非常大,做过OI,或者OJ的同学们相当明白这一点。
首先printf是纯面向过程的,cout里面涉及到对象的分配,运算符重载,就是这些面向对象的东西把cout搞慢了。

论坛徽章:
0
16 [报告]
发表于 2010-08-07 19:12 |只看该作者
回复 15# davelv


    但是cout是 全局对象啊

论坛徽章:
0
17 [报告]
发表于 2010-08-07 19:51 |只看该作者
cout在使用过程中会产生对象。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP