C语言:动态申请内存malloc、calloc、realloc、alloca的区别

头文件

#include <stdlib.h>

malloc

void *malloc(size_t size);

void指针可以指向任意类型的数据,所以C语言中可以不用强制类型转换,但是在C++中必须进行强制类型转换(例如:char *p = (char *)malloc(256);),否则报错;

对应的内存释放函数为:void free(void *p);


calloc

void *calloc(size_t nmemb, size_t size);

分配nmemb个类型大小为size的对象组成的数组,并且初始化为0;

对应的内存释放函数为:void free(void *p);

realloc

void *realloc(void *ptr, size_t size);

增加或减少以前分配的长度,当增加长度时,原本内存的内容可能会被移动到重新分配的足够大的内存区域,而新增的内存初始值是不确定的;

realloc(NULL, size);	等价于		malloc(size);
realloc(p, 0);			等价于		free(p);

对应的内存释放函数为:void free(void *p);

alloca

#include <alloca.h>
void *alloca(size_t size);

与malloc操作类似,但是malloc申请的是中,而alloca函数申请的内存是在中,所以alloca申请的内存不能调用free函数来释放,栈内存在函数结束后自动释放。它的缺点就是会增加栈的长度,而在有些系统可能不支持增加栈的长度,所以也就不支持该函数。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

R-QWERT

你的鼓励是我最大的动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值