malloc和calloc

秒速五厘米 2023-10-17 09:34 162阅读 0赞

malloc和calloc

malloc

malloc定义

  1. #include <stdlib.h>
  2. #include <malloc.h>
  3. /*
  4. * Funtion :memory allocation,动态内存分配,分配长度为size字节的内存块
  5. * Argument :所需的内存块长度
  6. * Return :如果分配成功则返回指向被分配内存的指针,否则返回空指针NULL
  7. */
  8. void *malloc(size_t size);

malloc用例

  1. #include<stdio.h>
  2. #include<malloc.h>
  3. int main()
  4. {
  5. char *p;
  6. //申请内存
  7. p=(char *)malloc(100*sizeof(char));
  8. //检查是否申请成功
  9. if(p)
  10. printf("Memory Allocated at: %x/n",p);
  11. else
  12. printf("Not Enough Memory!/n");
  13. //释放内存
  14. free(p);
  15. return 0;
  16. }

calloc

calloc定义

  1. #include <stdlib.h>
  2. #include <malloc.h>
  3. /*
  4. * Funtion :clear allocation,动态内存分配并清零
  5. * Argument :n个长度为size的内存块长度
  6. * Return :如果分配成功则返回指向被分配内存的指针,否则返回空指针NULL
  7. */
  8. void *calloc(size_t n, size_t size);

calloc用例

  1. #include<stdio.h>
  2. #include<malloc.h>
  3. int main()
  4. {
  5. char *p;
  6. //申请内存
  7. p=(char *)calloc(100,sizeof(char));
  8. //检查是否申请成功
  9. if(p)
  10. printf("Memory Allocated at: %x/n",p);
  11. else
  12. printf("Not Enough Memory!/n");
  13. //释放内存
  14. free(p);
  15. return 0;
  16. }

malloc与calloc的差别

  • 传入的参数不一样
  • malloc,所需size大小的内存块
  • calloc,所需n个size大小的内存块
  • calloc = malloc + 清零 (如下)

    p=(char )malloc(100sizeof(char));
    memset(p,0,100*sizeof(char));//清零`

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

深入理解malloc

  • malloc实质体现在,它将可用的内存块连接成一个长链表。
  • 调用malloc函数时,它沿链表寻找一个大到足以满足用户请求所需要的内存块。
  • 调用free函数时,它将用户释放的内存块连接到链表上。
  • 程序运行多次后,链表会被切成很多的小内存片段,即所谓的内存碎片化。
  • 如果程序这时候申请一个较大的内存块,那么可能就无法满足该需求。malloc就会请求延时,在链表上检查和整理各个内存片段,将相邻的小内存块合并成较大的内存块。如此之后,还是无法获得符合要求的内存块,malloc函数就会返回NULL指针

发表评论

表情:
评论列表 (有 0 条评论,162人围观)

还没有评论,来说两句吧...

相关阅读