Chinaunix首页 | 论坛 | 博客
  • 博客访问: 510849
  • 博文数量: 81
  • 博客积分: 7010
  • 博客等级: 少将
  • 技术积分: 1500
  • 用 户 组: 普通用户
  • 注册时间: 2005-12-15 10:51
文章分类

全部博文(81)

文章存档

2011年(1)

2009年(22)

2008年(58)

我的朋友

分类: C/C++

2009-01-07 13:35:55

callocmalloc

都是动态分配内存。

void *malloc( size_t size ); //分配的大小

void *calloc( size_t numElements, size_t sizeOfElement ); // 分配元素的个数和每个元素的大小

主要的不同是malloc不初始化分配的内存,calloc初始化已分配的内存为0

次要的不同是calloc返回的是一个数组,而malloc返回的是一个对象。

此外,要理解好calloc的效率一般是比较低的;

calloc等于malloc后在memset,很可能calloc内部就是一个malloc再来一个memset0。当然是连续的.

函数calloc()会将所分配的内存空间中的每一位都初始化为零,也就是说,如果你是字符类型或整数类型的元素分配内存,那麽这些元素将保证会被初始化为0;如果你是为指针类型的元素分配内存,那麽这些元素通常会被初始化为空指针;如果你为实型数据分配内存,则这些元素会被初始化为浮点型的零。

 

 

原型:extern void *calloc(int num_elems, int elem_size);

 

  用法:#include

 

  功能:为具有num_elems个长度为elem_size元素的数组分配内存

 

  说明:如果分配成功则返回指向被分配内存的指针,否则返回空指针NULL

        当内存不再使用时,应使用free()函数将内存块释放。

 

  举例:

 

      // calloc.c

    

      #include

      #include

 

      main()

      {

        char *p;

      

        clrscr();        // clear screen

 

        p=(char *)calloc(100,sizeof(char));

        if(p)

          printf("Memory Allocated at: %x",p);

        else

          printf("Not Enough Memory!\n");

        

        free(p);

 

        getchar();

        return 0;

      }

    

malloc

 

  原型:extern void *malloc(unsigned int num_bytes);

 

  用法:#include

 

  功能:分配长度为num_bytes字节的内存块

 

  说明:如果分配成功则返回指向被分配内存的指针,否则返回空指针NULL

        当内存不再使用时,应使用free()函数将内存块释放。

 

  举例:

 

      // malloc.c

     

      #include

      #include

 

      main()

      {

        char *p;

       

        clrscr();        // clear screen

 

        p=(char *)malloc(100);

        if(p)

          printf("Memory Allocated at: %x",p);

        else

          printf("Not Enough Memory!\n");

 

        free(p);

       

        getchar();

        return 0;

      }

阅读(1240) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~