1.malloc()函数

功能 申请堆内存
所需头文件

#include<stdlib.h>

函数原型

void *malloc(size_t,size);

参数(size) 所申请的一块堆内存的大小,单位是字节
返回值

成功 - 指向分配好的堆内存的指针

失败 - NULL

//例如
//因为int型的数据为4字节,这里的意思就是申请一个连续40字节的连续空间,赋值给指针arrint *arr = malloc(40);//但是此时申请的内存值是随机的,也就是不确定的
//使用举例
#include<stdio.h>
#include<stdlib.h>int main(void)
{int i = 0; int *arr = malloc(40);//申请一个40字节的连续空间赋值给指针arrfor(i = 0; i < 10; i++){printf("arr[%d] = %d\n", i, arr[i]); //测试:没有初始化前试着打印申请的内存值}free(arr); //释放申请的内存arr = NULL;return 0;
}

此处我们可以看到,使用malloc()函数申请的内存值是不确定的,是随机的。

2.calloc()函数

功能 申请堆内存
所需头文件

#include<stdlib.h>

函数原型

void *calloc(size_t count,size_t size);

参数(count与size)

size ---- 所申请的一块堆内存的大小,单位是字节

count ---- 所申请的堆内存的块数,所有的内存块是连续分布的,无间隔的

返回值

成功 - 指向分配好的堆内存的指针

失败 - NULL

//例如
//申请10个int类型空间,就是说申请一个40字节连续的空间,与malloc()函数是类似的int *arr = calloc(10,sizeof(int));//但是calloc在申请后,会对空间逐一进行初始化,并设置值为0;
//使用举例
#include<stdio.h>
#include<stdlib.h>int main(void)
{int i = 0; int *arr = calloc(10,sizeof(int));//申请10个int类型空间-连续无间隔的for(i = 0; i < 10; i++){printf("arr[%d] = %d\t", i, arr[i]);//测试:没有初始化前试着打印申请的内存值}free(arr);//打印完后释放该内存arr = NULL;return 0;
}

此处我们可以看到,使用calloc()函数申请内存值后,会对其进行初始化,值为0。

3.malloc()与calloc()的区别

区别一:

malloc(size_t,size) ---- size为我们要申请空间的大小,该值是需要我们去计算的

calloc(size_t count,size_t size) ---- count为我们需要申请空间的块数,size为我们需要申请类型的占的字节大小,并不需要人为的计算空间大小

而且,使用malloc()函数申请后空间的值是随机的,并没有进行初始化,但是使用calloc()函数却在申请后,对空间逐一进行初始化,并设置值为0;

区别二:

效率问题。calloc函数由于给每一个空间都要初始化值,那必然效率较malloc要低,并且现实世界,很多情况的空间申请是不需要初始值的,所以对于初学者,一般都是接触malloc函数较多。

C语言-malloc()函数与calloc()函数的使用及区别相关推荐

  1. c语言中alloc作用,C语言内存分配 :malloc()函数与alloc()函数

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

  2. c语言malloc函数用法_C语言内存模型!小本本记起来啊!

    一.C语言的内存分配模型 1.程序代码区:存放函数体的二进制代码. 2.全局区数据区:全局数据区划分为三个区域.全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的全 ...

  3. c语言malloc引用类型作参数,C语言动态内存函数的理解和总结

    第一:内存的使用 内存可以分为以下三个主要的部分:栈区.堆区.静态区 栈区(stack):存放的是局部变量.函数的形参等都是在该区上存放的. 堆区(heap):动态内存函数开辟的空间.比如malloc ...

  4. C和指针之动态内存分配之(编写calloc函数,函数内部使用malloc函数来获取内存)

    1.问题 编写calloc函数,函数内部使用malloc函数来获取内存               2.代码实现 #include <stdio.h> #include <stdli ...

  5. C语言calloc()函数:分配内存空间并初始化

    http://c.biancheng.net/cpp/html/134.html 头文件:#include <stdlib.h> calloc() 函数用来动态地分配内存空间并初始化为 0 ...

  6. C语言malloc函数的功能及用法

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到网站 点击跳转浏览. https://blog.csdn.net/qq_26501341/article/d ...

  7. C语言calloc()函数

    函数原型如下: void* calloc (size_t num, size_t size); calloc() 函数用来动态地分配 num 个长度为 size 字节内存空间并初始化为 0,分配成功返 ...

  8. 甜甜C语言—malloc()函数

    文章目录 一:函数简介 二:函数机制 (一)头文件 函数原型 (二)函数功能 (三)返回值 (四)参数传递 三:空间的释放 (一)free()函数 四:函数使用 (一)例题 (二) 解题思路 (三)答 ...

  9. c语言malloc calloc,C语言内存管理:malloc、calloc、free的实现

    任何一个对C稍稍有了解的人都知道malloc.calloc.free.前面两个是用户态在堆上分配一段连续(虚拟地址)的内存空间,然后可以通过free释放,但是,同时也会有很多人对其背后的实现机制不了解 ...

最新文章

  1. Linux ISCSI配置
  2. oracle如何上传图片,js实现上传图片之上传前预览图片
  3. 京瓷2010复印a4内容不全_百万畅销书活法的原点,稻盛和夫从未公开的京瓷秘籍...
  4. 在pcDuino上使用蓝牙耳机玩转音乐
  5. Android:EditText 属性
  6. BZOJ 4872 luogu P3750 [六省联考2017]分手是祝愿
  7. Java 理论与实践: JDK 5.0 中更灵活、更具可伸缩性的锁定机制--转载
  8. Ubuntu16.04 ROS 深度学习_传智播客 智能机器人软件开发 学习路线图出炉!首发优惠!!...
  9. 内容组织高效项目方案是如何产生的 !
  10. vant组件搜索并选择_借助PARTsolutions 选型助手,轻松快速地找到组件。
  11. RDD持久化、广播、累加器
  12. kibana 查看有多少索引库_干货 | Elasticsearch、Kibana数据导出实战
  13. QTCreator2.8.0+Qt Open source 4.8.5环境配置(Win7x64)
  14. mysql 编码种类_MySQL 编码
  15. Java Swing 如何关闭当前窗口?
  16. HDU-1394 Minimum Inversion Number 线段树+逆序对
  17. 怎样从excel随机抽取多行
  18. TD-SCDMA迫零块线性均衡
  19. python模拟人工滑动_pyppeteer 模拟人工滑动验证(一)
  20. Photoneo为IKEA提供家具零件包装自动化解决方案

热门文章

  1. 微信和支付宝聚合收款码是怎么做的呢?
  2. QQ、支付宝、微信收款码三合一开源程序
  3. 未明学院:实习达人养成计:四大/券商/咨询500强实习达人大学四年的方法论都在这里了!
  4. 凡子谷机器人创客教育_分享机器人创客教育的五点心得
  5. 济南大学计算机技术课程表,济南大学信息科学与工程学院2015-2016学年第一学期2015级.doc...
  6. 960000-byte external allocation too large for this process VM won't let us allocate 960000 bytes jav
  7. Python基础入门3
  8. 金蝶云星空自定义接口:查询数据库
  9. Python——数据分析,原来女孩子喜欢这些礼物
  10. 脱离电商平台新的引流方式