名称malloc和calloc是动态分配内存的库函数。这意味着在程序运行时从堆段分配内存。

初始化

    malloc()分配给定大小(以字节为单位)的内存块,并返回一个指向块开头的指针。malloc()不会初始化分配的内存。如果在初始化之前我们尝试访问内存块的内容,那么我们将得到分段错误(或者可能是垃圾值)。

void* malloc(size_t size);

    calloc()分配内存并将分配的内存块初始化为零。如果我们尝试访问这些块的内容,那么我们将得到 0。

void* calloc(size_t num, size_t size);

参数数量

    与malloc()不同,calloc()有两个参数:
    1) 要分配的块数。
    2) 每个块的大小。

返回值

    在 malloc() 和 calloc() 中成功分配后,返回指向内存块的指针,否则返回 NULL 值,表示分配失败。
    例如,如果要为5个整数的数组分配内存,请参见以下程序:

// C program to demonstrate the use of calloc()
// and malloc()
#include <stdio.h>
#include <stdlib.h>int main()
{int* arr;// malloc() allocate the memory for 5 integers// containing garbage valuesarr = (int*)malloc(5 * sizeof(int)); // 5*4bytes = 20 bytes// Deallocates memory previously allocated by malloc() functionfree(arr);// calloc() allocate the memory for 5 integers and// set 0 to all of themarr = (int*)calloc(5, sizeof(int));// Deallocates memory previously allocated by calloc() functionfree(arr);return (0);
}

    我们可以通过使用 malloc() 和 memset() 来实现与 calloc() 相同的功能:

ptr = malloc(size);
memset(ptr, 0, size);

    注意:最好使用 malloc 而不是 calloc,除非我们想要初始化为0,因为 malloc 比 calloc 快。所以,如果我们只是想复制一些东西或者做一些不需要用零填充内存块的事情,那么malloc将是一个更好的选择。

参考文档

[1]Shubham Bansal.Difference Between malloc() and calloc() with Examples[EB/OL].https://www.geeksforgeeks.org/difference-between-malloc-and-calloc-with-examples/,2020-01-03.

malloc与calloc的区别及实例相关推荐

  1. malloc 和 calloc的区别?

    函数malloc()和calloc()都可以用来动态分配内存空间,但两者稍有区别.malloc()函数有一个参数,即要分配的内存空间的大小:void *malloc(size_t size);call ...

  2. malloc与calloc的区别

    malloc()与calloc() C语言跟内存分配方式     1) 从静态存储区域分配.内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在.例如全局变量,static变量.   ...

  3. kmalloc、vmalloc、malloc、calloc的区别

    1.kmalloc和vmalloc是分配的是内核的内存,malloc.calloc分配的是用户的内存; 2.kmalloc保证分配的内存在物理上是连续的,vmalloc保证的是在虚拟地址空间上的连续, ...

  4. 别再说你不懂malloc()和calloc()的区别

    1.参数个数上的区别 malloc函数:malloc(size_t size)函数有一个参数,即要分配的内存空间的大小. calloc函数:calloc(size_t numElements,size ...

  5. malloc和calloc的区别

    是否对申请的区域进行初始化而已 但是我想你也知道我们写程序的时候多用malloc而很少用calloc,何解? 因为calloc虽然对内存进行了初始化(全部初始化为0),但是同样也要降低效率的 call ...

  6. C语言malloc和calloc的区别

    是否对申请的区域进行初始化而已 但是我想你也知道我们写程序的时候多用malloc而很少用calloc,何解? 因为calloc虽然对内存进行了初始化(全部初始化为0),但是同样也要降低效率的 call ...

  7. malloc()与calloc区别【转】

    转自:http://blog.csdn.net/firecityplans/article/details/4490124/ 版权声明:本文为博主原创文章,未经博主允许不得转载. Both the m ...

  8. realloc,malloc,calloc的区别

    三个函数的申明分别是:  void* realloc(void* ptr, unsigned newsize);  void* malloc(unsigned size);  void* calloc ...

  9. 动态内存管理 - malloc、calloc、realloc、柔性数组

    目录 一.为什么存在动态内存分配 二.动态内存函数的介绍 1.1 malloc 1.2 free 1) 动态开辟多少个字节的内存空间,返回该空间的起始地址:且开辟的空间使用方法,类似于数组,是一块连续 ...

  10. malloc()和calloc()有啥区别

    malloc和calloc函数在参数百个数.初始化内存空间.函数返回值上有区别: 1.参数个数上的区别: malloc函数:malloc(size_t size)函数有一个参数,即要度分配的内存空间的 ...

最新文章

  1. 极限编程 (Extreme Programming) 和用户故事 (User Stories) 的关系
  2. 盘点VS2015 预览版的5个新特性
  3. 推荐常用算法之-基于内容的推荐(转自-BreezeDeus博主)
  4. 匿名管道实现获取控制台程序输出
  5. linux勒索病毒名称,Linux 也有加密勒索病毒了,也有人真的中了
  6. spark大数据基础概念
  7. maven java 参数_将Maven参数注入Java类
  8. .Net (C#)委托和事件(获取多个返回值)
  9. 【Git、GitHub、GitLab】十 将git仓库备份到本地
  10. Python网络请求库Requests,妈妈再也不会担心我的网络请求了(二)
  11. 猪肉都被绑上了“家族标签”,大数据已波及到农牧业!
  12. 对Table_locks_immediate值的理解
  13. 【医学图像分割】 基于matlab GVF算法医学图像分割【含Matlab源码 1213期】
  14. c51汇编语言教程,汇编语言入门视频教程
  15. 模型预测控制的缺点_模型预测控制MPC的通俗解释
  16. 头条极速版-艳云脚本云控系统
  17. 真实揭秘90后程序员婚恋现状,有点扎心!
  18. 最近大火的chatGPT是什么?它是怎样聊天的?
  19. 如何下载Microsoft Edge浏览器新建标签页中好看的壁纸
  20. js实现圆柱形轮播图

热门文章

  1. 会java 学c_先学Java再学c会简单点吗?
  2. Python的数据类型讲座
  3. 阿里云实践训练营第七天——Class6 NAS快速搭建个人网盘
  4. rfm模型python_使用python实现RFM模型
  5. 网页 Failed to initialize player‘s 3D settings 小游戏4399 修复
  6. java中如何将一个对象,空值转换成空字符串
  7. UDS(一)入门概述
  8. 以太网没有有效IP配置问题
  9. 什么是Oncall?
  10. 入门OSPF就这一篇足够了