免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2106 | 回复: 3
打印 上一主题 下一主题

几个可能有用的程序性能分析的宏 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-10-20 09:42 |只看该作者 |倒序浏览
前些天因为系统运行的有些慢,所以就想找一下看程序哪里占用的时间最多.
为了偷点懒,就写了几个宏.
我觉得这个应该还算有点通用性,贴出来给大家看看.
多提改进意见.
下面是一个小的测试程序.
一共有这么几个宏
ANA_DECLARE
ANA_INIT
ANA_BEGIN
ANA_END
ANA_OUTPUT


  1. #include <ctime>;
  2. #include <cstdio>;
  3. #include <iostream>;
  4. #include <cstdlib>;

  5. using namespace std ;

  6. #ifndef ANA_DECLARE
  7. #define ANA_DECLARE(lapsed) \
  8. unsigned long lapsed ; \
  9. struct timeval __first_##lapsed ;   \
  10. struct timeval __second_##lapsed
  11. #endif

  12. #ifndef ANA_INIT
  13. #define ANA_INIT(lapsed) \
  14. do{ \
  15.         lapsed = 0; \
  16. }while(0)
  17. #endif

  18. #ifndef ANA_BEGIN
  19. #define ANA_BEGIN(lapsed) gettimeofday(&__first_##lapsed, NULL)
  20. #endif

  21. #ifndef ANA_END
  22. #define ANA_END(lapsed) \
  23. gettimeofday(&__second_##lapsed,NULL) ; \
  24. lapsed += (__second_##lapsed.tv_sec - __first_##lapsed.tv_sec) * 1000000 + __second_##lapsed.tv_usec - __first_##lapsed.tv_usec
  25. #endif

  26. #ifndef ANA_OUTPUT
  27. #define ANA_OUTPUT(lapsed) cout << #lapsed" = " << lapsed << " usec" << endl
  28. #endif

  29. int main()
  30. {       
  31.         ANA_DECLARE(test1) ;
  32.         ANA_DECLARE(test2) ;       
  33.         ANA_INIT(test1) ;
  34.         ANA_INIT(test2) ;
  35.        
  36.         for (int i = 0; i < 1000 ; i ++){
  37.                 //........
  38.                 ANA_BEGIN(test1) ;
  39.                 func_test1() ;
  40.                 ANA_END(test1) ;
  41.                
  42.                 //............
  43.                 //...........
  44.                
  45.                 ANA_BEGIN(test2) ;
  46.                 func_test2() ;
  47.                 ANA_END(test2) ;
  48.                
  49.                 //..............
  50.         }
  51.        
  52.         ANA_OUTPUT(test1) ;
  53.         ANA_OUTPUT(test2) ;
  54.        
  55.         return 0 ;
  56. }


复制代码

论坛徽章:
0
2 [报告]
发表于 2005-10-20 10:43 |只看该作者

几个可能有用的程序性能分析的宏

good
嗖藏了

论坛徽章:
0
3 [报告]
发表于 2005-10-20 10:50 |只看该作者

几个可能有用的程序性能分析的宏

宏定义有多行语句的时候,有 do{}while(0)要好一些。
如果程序里有
if (..)
  ...
else
  ANA_END(test2);
怎么办?

论坛徽章:
0
4 [报告]
发表于 2005-10-20 11:01 |只看该作者

几个可能有用的程序性能分析的宏

原帖由 "galaxywar" 发表:
宏定义有多行语句的时候,有 do{}while(0)要好一些。
如果程序里有
if (..)
  ...
else
  ANA_END(test2);
怎么办?


ANA_INIT用do{}while(0)写是想可能以后会在这里补充些东西.

ANA_BEGIN和ANA_END应该是成对出现的,就好象括号.

if(..)else
会有这种需求吗
这样写的话中间那段的统计时间就统计不出来了,你有什么好办法么
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP