【C语言】malloc()和calloc()的区别

本文介绍了C语言中的动态内存分配函数malloc()和calloc()。malloc()用于分配特定大小的内存块,不进行初始化,而calloc()不仅分配内存,还会将分配的内存初始化为0。malloc()比calloc()更快,但在内存初始化方面,calloc()更安全。了解这两个函数的差异对于编写高效且避免未定义行为的C程序至关重要。
摘要由CSDN通过智能技术生成

整理自外网英文文献(见参考文献),非商用,仅供学习交流

目录

什么是malloc()?

什么是calloc()?

malloc与calloc的对比

参考文献


C语言用malloc()函数和calloc()函数进行动态内存分配。动态分配指代码运行时从堆寄存器分配内存。

什么是malloc()?

malloc()是内存分配函数的缩写,mmemory(内存)

malloc()动态分配一块(连续)特定尺寸的大容量内存,返回值是个指向分配单元开头的指针,可以指向任何格式的变量。如果内存分配失败,返回空指针。因为malloc()不会自动初始化内存,所以如果不手动初始化变量,很可能造成未定义的行为(undefined behaviour),在多数情况下也就是读取到垃圾值(如果新分配的内存单元曾被分配写入,上次写入的值会保留到本次)

malloc()需要1个参量,即分配的内存空间的字节数。

例:

int* allocated_with_malloc = malloc(5 * sizeof(int));

sizeof()函数的参量为变量类型名,返回该类型占用的字节数。

什么是calloc()?

calloc()函数中的c代表contiguous(连续),分配特定尺寸的内存(不一定是连续的),并将其初始化为0。和malloc()一样,返回值也是指向内存区域的指针。如果内存分配失败,返回空指针。

calloc()需要2个参量:(1)分配的数据块个数(2)没有数据块的字节数。

例:

int* allocated_with_calloc = calloc(5, sizeof(int));

malloc与calloc的对比

malloc()

calloc()

1.

malloc() 创建特定尺寸的单块内存

calloc()给单个变量分配多块内存

2.

1个参数

2个参数

3.

更快

更慢

4.

时间效率高

时间效率低

5.

可能有垃圾值(如果新分配的内存单元曾被分配写入,上次写入的值会保留到本次)

分配的内存初始化为0

6.

指内存分配

指连续内存分配

参考文献

【1】Difference Between malloc() and calloc() with Examples - GeeksforGeeks

【2】Difference Between malloc() and calloc() (byjus.com)

注:【2】提到两个函数的返回值是空指针,是错误的。malloc()和calloc()只在分配内存失败的情况下返回空指针,其他情况下均返回指向空间开头位置的指针。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值