当前位置: 首页 > news >正文

malloc、calloc、realloc和alloca各种的区别

需要先包含头文件

#include"malloc.h"
malloc是标准的在 中开辟新的空间
比如
char *pt=(char *)malloc(10*sizeof(char));
需要free(p)才会释放空间
 
calloc也是开辟空间,但是使用方式不一样
比如
char *pt==(char *)calloc(100, sizeof(char));
然后用 calloc开辟的空间其内容会自动初始化为空,等于把该 中使用的空间清零。也就是赋值'\0'。
原本未使用的空间内容都是'?'。
也需要用free来对该空间进行释放
 
realloc对指针空间做重新定义,新的空间必须 大于原来的空间
比如
char *pt=(char *)malloc(10*sizeof(char));
realloc(pt, 1000*sizeof(char));
如果小于原来的空间会造成一些异常。(编译还是会通过)
 
alloca是最特殊的开辟栈空间方法,优点是当离开调用这个函数的时候,栈所分配的空间会 自动释放(也就是free)。
比如在一个函数中定义
void fun()
{
char *ptt=(char *)alloca(100*sizeof(char));
}
当跳出这个函数的时候,系统会自动free ptt这个空间。
但是他不是一个可移植的方法,如果处理器上不支持堆栈操作这个方法就不可用。(目前大部分处理器上都可以用。)
但是如果需要这个ptt在其他地方(这个函数外)还是需要使用,那么这个方法就不可取了。
 
这个要说明一下free的作用,free并不是把栈的地址的内容给清零,而是告诉系统栈的某块内容可以被使用而已。如果够不告诉系统,则表明该区域一直在使用(实际上已经不使用了)。那么系统在做下一次new或者malloc的操作的时候就会开辟另一个空间。但是栈空间是有限的,如果一直没有free那么这个栈就会溢出。
 
内存泄露的定义是:做malloc类似的开辟空间的操作之后,当不使用的时候不做释放结果导致一直占据该内存单。(用 动态存储分配函数动态开辟的空间,在使用完毕后未释放,结果导致一直占据该内存单元。直到程序结束。)

转载于:https://www.cnblogs.com/Ph-one/p/6812276.html

相关文章:

  • Alsa中PCM参数设置⭐⭐
  • alsa 编程
  • fopen
  • RIFF和WAVE音频文件格式
  • wav音频文件头解析
  • fseek
  • signal( SIGINT, SigIntHandler )
  • Linux下直接读写物理地址内存
  • 数学2考点
  • 2018考研全年备考规划,你还在等什么?
  • 复旦软件工程专业课
  • src源dst目标
  • linux 中mmap的用法
  • platform_set_drvdata 和 platform_get_drvdata
  • 内核Alsa之pcm
  • ES6语法详解(一)
  • Flex布局到底解决了什么问题
  • HTTP那些事
  • JAVA 学习IO流
  • Java精华积累:初学者都应该搞懂的问题
  • Mac转Windows的拯救指南
  • MySQL用户中的%到底包不包括localhost?
  • NLPIR语义挖掘平台推动行业大数据应用服务
  • node学习系列之简单文件上传
  • python 学习笔记 - Queue Pipes,进程间通讯
  • Sass 快速入门教程
  • spring boot 整合mybatis 无法输出sql的问题
  • Vue实战(四)登录/注册页的实现
  • 回顾 Swift 多平台移植进度 #2
  • 讲清楚之javascript作用域
  • 解析带emoji和链接的聊天系统消息
  • 前端技术周刊 2018-12-10:前端自动化测试
  • 前端面试题总结
  • 容器化应用: 在阿里云搭建多节点 Openshift 集群
  • 算法---两个栈实现一个队列
  • 一、python与pycharm的安装
  • 【运维趟坑回忆录 开篇】初入初创, 一脸懵
  • 好程序员大数据教程Hadoop全分布安装(非HA)
  • #!/usr/bin/python与#!/usr/bin/env python的区别
  • #QT(串口助手-界面)
  • #宝哥教你#查看jquery绑定的事件函数
  • (2.2w字)前端单元测试之Jest详解篇
  • (2015)JS ES6 必知的十个 特性
  • (4)Elastix图像配准:3D图像
  • (5)STL算法之复制
  • (PWM呼吸灯)合泰开发板HT66F2390-----点灯大师
  • (ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY)讲解
  • (八)Flask之app.route装饰器函数的参数
  • (力扣)循环队列的实现与详解(C语言)
  • (十八)SpringBoot之发送QQ邮件
  • (十一)手动添加用户和文件的特殊权限
  • (转)Oracle 9i 数据库设计指引全集(1)
  • ****** 二 ******、软设笔记【数据结构】-KMP算法、树、二叉树
  • *ST京蓝入股力合节能 着力绿色智慧城市服务
  • .NET 8.0 发布到 IIS