免费注册 查看新帖 |

Chinaunix

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

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

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
11 [报告]
发表于 2004-09-09 12:35 |只看该作者

calloc函数的效率

但是calloc函数里面一定是有一个乘法操作的,我说的是这个。
因为100和sizeof(char)是用两个参数传进函数里面的。

论坛徽章:
0
12 [报告]
发表于 2004-09-09 12:54 |只看该作者

calloc函数的效率

N个常数的任何操作(+ - * / )等编译后就是一个常数。
编译时就计算了。

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
13 [报告]
发表于 2004-09-09 12:57 |只看该作者

calloc函数的效率

原帖由 "思一克" 发表:
N个常数的任何操作(+ - * / )等编译后就是一个常数。
编译时就计算了。


一句话,认真看我的帖子了吗?这个东西谁都知道。

论坛徽章:
0
14 [报告]
发表于 2004-09-09 13:02 |只看该作者

calloc函数的效率

啊,SORRY,你是说里面有乘法操作。
两个应该基本差不多,CALLOC慢点你测的结果应该是对的吧。

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
15 [报告]
发表于 2004-09-09 20:50 |只看该作者

calloc函数的效率

>;>;malloc函数的参数只有一个,这个参数可以在编译的过程中就确定开辟空间的大小。

呵呵,你说的还是有问题呀。
比如:

  1. char *ptr = (char *)malloc(n*i);
复制代码

n和i为程序中的变量,你说编译的时候能确定大小吗?

论坛徽章:
0
16 [报告]
发表于 2004-09-09 23:03 |只看该作者

calloc函数的效率

我想问个问题:

下面是我在网上找到的。

1。为具有num_elems个长度为elem_size元素的数组分配内存。

2。calloc()用来配置num_elems个相邻的内存单位,每一单位的大小为elem_size

3。在内存动态存储区中分配n块长度为"size"字节的连续区域。函数的返回值为该区域的首地址。calloc函数与malloc 函数的区别仅在于一次可以分配n块区域。

我的问题是,
calloc分配内存快,是在大小为elem_size的内存快之间连续
还是在在整个大内存快间连续?(地址为num_elems * elem_size大小)

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
17 [报告]
发表于 2004-09-10 08:39 |只看该作者

calloc函数的效率

[quote]原帖由 "lenovo"]n和i为程序中的变量,你说编译的时候能确定大小吗?[/quote 发表:


哎呀呀,语文问题很大啊,再改过。

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
18 [报告]
发表于 2004-09-10 08:46 |只看该作者

calloc函数的效率

原帖由 "ljttlf" 发表:
我想问个问题:

下面是我在网上找到的。

1。为具有num_elems个长度为elem_size元素的数组分配内存。

2。calloc()用来配置num_elems个相邻的内存单位,每一单位的大小为elem_size

3。在内存动态存储区中?.........


都应该是连续的吧?应该和malloc一样吧,只不过多了一个清0的动作。

论坛徽章:
0
19 [报告]
发表于 2009-03-30 11:24 |只看该作者
原帖由 ljttlf 于 2004-9-9 23:03 发表
我想问个问题:

下面是我在网上找到的。

1。为具有num_elems个长度为elem_size元素的数组分配内存。

2。calloc()用来配置num_elems个相邻的内存单位,每一单位的大小为elem_size

3。在内存动态存储 ...


  
  这个是关键啊,继续关注中。

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


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

  5. #define MAX  512                //give a value equal to your RAM
  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. }

  37. 然后根据结果给出合理的解释.

复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP