1. malloc,只管分配,不初始化
void *malloc(size_t size);

malloc()在内存的动态存储区中分配一块长度为size字节的连续区域。参数size为需要的内存空间的长度,返回该区域的地址。

malloc不能初始化所分配的内存空间,需要用memset而函数calloc能。如果这部分内存曾经被分配过,则其中可能遗留各种各样的数据。

2. calloc
void *calloc(size_t nmemb, size_t size);

calloc()与malloc()相似,参数size为申请地址的单位元素长度,nmemb为参数个数。

calloc会将所分配的空间中的每一位都初始化为零。

3. realloc
void *realloc(void *ptr, size_t size);
realloc()是给一个已经分配了地址的指针重新分配空间,参数ptr为原有的空间地址,newsize是重新申请的地址空间。3.区别

realloc可以对给定的指针所指向的空间进行扩大或缩小,原有的内存中的内容将保持不变。realloc并不保持调整后的内存空间和原来的内存空间保持同一内存地址,返回的指针很可能指向新的地址。

malloc、calloc函数的实质体现在将一块可用的内存连接为一个链表。调用malloc函数时,它沿连接表寻找一个大到足以满足用户请求所需要的内存块,然后将该内存块一分为二(一块与用户申请的大小一样,另一块就是剩下的字节)。接下来,将分配给用户的那块内存地址传给用户,调用free函数时,它将用户释放的内存块连接到空链上,最后空闲链表会被切成很多的小内存片段。
  realloc是从堆空间上分配内存,当扩大一块内存空间时,realloc试图直接从现存的数据后面的哪些字节中获得附加的字节,如果能够满足需求,自然天下太平,如果后面的字节不够,那么就使用堆上第一个足够满足要求的自由空间块,现存的数据然后就被拷贝到新的位置上,而老块则放回堆空间,这句话传递的一个很重要的信息就是数据可能被移动。

malloc,colloc,realloc的区别相关推荐

  1. malloc,colloc,realloc内存分配,动态库,静态库的生成与调用

     1.在main方法里面直接定义一个非常大的数组的时候,可能会出现栈溢出:错误代码演示: #include<stdio.h> #include<stdlib.h> void ...

  2. calloc、malloc、realloc函数的区别及用法

    calloc.malloc.realloc函数的区别及用法! 三者都是分配内存,都是stdlib.h库里的函数,但是也存在一些差异. (1)malloc函数.其原型void *malloc(unsig ...

  3. malloc与calloc的区别

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

  4. 内存分布malloc/calloc/realloc/free/new/delete、内存泄露、String模板、浅拷贝与深拷贝以及模拟string类的实现

    内存分布 一.C语言中的动态内存管理方式:malloc/calloc/realloc和free 1.malloc: 从堆上获得指定字节的内存空间,函数声明:void *malloc (int n); ...

  5. C语言动态申请内存空间之malloc(),calloc(),realloc()函数

    在C语言中用于动态申请内存空间的函数主要为malloc()函数,calloc()函数,以及realloc()函数,以下主要介绍三个函数的用法,区别以及使用时的注意事项. malloc(),calloc ...

  6. c语言malloc,calloc,realloc函数介绍

    malloc,calloc,realloc动态内存管理函数的出现解决了在某些c语言标准中不能使用变长数组的问题 这三个函数的使用需要头文件stdlib.h,这些函数开辟的空间在堆区,系统不会自动释放, ...

  7. malloc/calloc/realloc

    malloc/calloc/realloc和free介绍: malloc函数 malloc函数可以从堆上获得指定字节的内存空间,其函数声明如下: void * malloc(int n); 参数释义: ...

  8. malloc calloc realloc 三兄弟!!!

    学习过C语言的都知道 malloc calloc realloc 这三个函数,这三个函数都是用于动态的分配内存的,最后都要使用 free函数进行释放. 这三个函数的头文件 : stdlib.h 在li ...

  9. c语言释放内存函数,【C语言】内存分配函数malloc/ calloc/ realloc及内存释放free

    前言: 内存区域划分与分配: 1.栈区(stack)--程序运行时由编译器自动分配,存放函数的参数值,局部变量的值等,程序结束时由编译器自动释放. 2.堆区(heap) -- 在内存开辟另一块存储区域 ...

最新文章

  1. 虚拟机WIN7显示主机ubuntu的文件
  2. 观点|基础模型产业发展路在何方?李飞飞等共话基础模型未来趋势
  3. ARM7+PROTEUS调试(转)
  4. python ipython spyder
  5. JStorm与Storm源码分析(五)--SpoutOutputCollector与代理模式
  6. 访问手机app怎么看路径_推荐一款手机看国内电视的app
  7. LearningR-XML
  8. java程序语句的理解,[每日学习笔记][2012.07.10]使用Java理解程序逻辑(六)
  9. Akka笔记–演员介绍
  10. 截屏悬浮软件_吹爆的软件,准确率太强了!
  11. 《普林斯顿微积分读本》 第二章 三角学回顾
  12. 熊国正版游戏之TXT文字乱码【已解决】【rutracker】【byrut】【单机】【破解】【俄罗斯】
  13. .NET爬虫获取拼多多商品价格
  14. 自动控制原理知识点梳理——6.线性系统的校正方法
  15. rocketmq内外网同时访问
  16. 显著性检测—谱残差方法分析与实现
  17. 2018最新版省市区三级联动下拉框+所有源代码以及数据库
  18. 大脑分区不是功能关键!Science封面4文连发:智慧从脑区间连接中诞生
  19. `英语` 2022/8/21
  20. 开启Demond Page需要的步骤(By Walle@ARMCE)

热门文章

  1. Linux:下载wget
  2. 谁主浮沉 信息化时代下的高校视频市场的变革
  3. 如何修改tomcat默认端口号(详细步骤)
  4. 杭州计算机高中分数线,杭州历年高中录取分数线
  5. 趣链科技解读区块链技术及其产业应用 | 陀螺公开课第2期
  6. pdf如何提取某一页呢
  7. 数字信号处理-基于matlab的语音信号的加密解密
  8. 常见损失函数深度剖析之二分类
  9. swoole 要求php版本,多 PHP 版本共存的环境下安装 Swoole 到指定版本
  10. 为者常成,行者常至(进步、收获、成长、自信)