免费注册 查看新帖 |

Chinaunix

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

[函数] calloc函数的效率 [复制链接]

论坛徽章:
0
21 [报告]
发表于 2009-03-30 12:17 |只看该作者
没好好学习啊,可怜

论坛徽章:
0
22 [报告]
发表于 2009-03-30 14:13 |只看该作者
和乘法操作几乎没有关系.
实际情况是, cmalloc速度应该快一点.
我有程序, 大家可以实验速度.

你实验是malloc/memset快还是cmalloc快?


  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4. #include <string.h>

  5. #define MAX  2048
  6. #define LEN  1024*1024
  7. int main(int argc, char **argv)
  8. {
  9.         int     i;
  10.         char    *p;
  11.         time_t  t;

  12.         t = time(0);
  13.         printf("begin...\n");

  14.         if(argv[1] && argv[1][0] == 'c')
  15.         for ( i = 0; i < MAX; i++) {
  16.                 p = (char *)calloc(LEN,sizeof(char));
  17.                 if ( p == NULL ) {
  18.                         printf("calloc error!\n");
  19.                         exit(1);
  20.                 }
  21.                 free(p);
  22.         }

  23.         else
  24.         for ( i = 0; i < MAX; i++) {
  25.                 p = (char *)malloc(LEN*sizeof(char));
  26.                 memset(p,0,LEN*sizeof(char));
  27.                 if ( p == NULL ) {
  28.                         printf("calloc error!\n");
  29.                         exit(1);
  30.                 }
  31.                 free(p);
  32.         }

  33.         t = time(0) - t;
  34.         printf("%ld\n",t);
  35.         exit(0);
  36. }
复制代码

论坛徽章:
0
23 [报告]
发表于 2009-06-03 15:11 |只看该作者
原帖由 思一克 于 2009-3-30 14:13 发表
和乘法操作几乎没有关系.
实际情况是, cmalloc速度应该快一点.
我有程序, 大家可以实验速度.

你实验是malloc/memset快还是cmalloc快?


#include
#include
#include
#include

#define MAX  2 ...


我的验证结果比较奇怪
calloc很快就返回了,malloc却要较长时间,但我把memset注释掉,malloc也很快返回了,不知道为什么这里memset占用了这么多时间?难道是一次memset的字节比较多导致memset效率出现问题?

论坛徽章:
0
24 [报告]
发表于 2009-06-28 21:32 |只看该作者

别再写这么无聊的话题了。

别再写这么无聊的话题了。

论坛徽章:
0
25 [报告]
发表于 2009-06-28 21:36 |只看该作者

别再写这么无聊的话题了。

别再写这么无聊的话题了:
用一道程序来评价一个函数的效率,就同中关村在线的JS用整机的性能来比效CPU的性能一样——无味。

论坛徽章:
0
26 [报告]
发表于 2009-06-28 21:52 |只看该作者
也可能和memset的实现有关吧。

调用calloc使用的是C lib里面的memset,而用malloc+memset有可能是GCC自己用builtin的memset

论坛徽章:
0
27 [报告]
发表于 2009-06-29 06:43 |只看该作者
建议做两次测试:
1)两代码分别做malloc()和calloc()分配,但不使用所分配的空间,看哪个快?
2)两代码分别做malloc()和calloc()分配,然后使用所分配的空间,看哪个快?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP