C 语言主要提供 malloc、realloc、calloc、alloca 与 aligned_alloc 等内存分配函数来实现对内存的分配功能。

1) malloc 函数原型如下:

void * malloc (size_t size);

该函数用于从堆中分配内存空间,内存分配大小为 size。如果内存分配成功,则返回首地址;如果内存分配失败,则返回 NULL。

2) calloc 函数原型如下:

void * calloc (size_t num, size_t size );

该函数用于从堆中分配 num 个相邻的内存单元,每个内存单元的大小为 size。如果内存分配成功则返回第一个内存单元的首地址;否则内存分配失败,则返回 NULL。

从功能上看,calloc 函数与语句“malloc(num*size)”的效果极其相似。但不同的是,在使用 calloc 函数分配内存时,会将内存内容初始化为 0。

3) realloc 函数原型如下:

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

该函数用于更改已经配置的内存空间,它同样是从堆中分配内存的。当程序需要扩大一块内存空间时,realloc 函数试图直接从堆上当前内存段后面的字节中获得更多的内存空间,即它将首先判断当前的指针是否有足够的连续存储空间,如果有,则扩大 ptr 指向的地址,并且将 ptr 返回(返回原指针);如果当前内存段后面的空闲字节不够,那么将先按照 size 指定的大小分配空间(使用堆上第一个能够满足这一要求的内存块),并将原有数据从头到尾拷贝到新分配的内存区域,然后释放原来 ptr 所指内存区域,同时返回新分配的内存区域的首地址,即重新分配存储器块的地址。

需要注意的是,参数 ptr 为指向先前由 malloc、calloc 与 realloc 函数所返回的内存指针,而参数 size 为新分配的内存大小,其值可比原内存大或小。其中:

  • 如果 size 值比原分配的内存空间小,内存内容不会改变(即新内存保持原内存的内容),且返回的指针为原来内存的首地址(即 ptr)。
  • 如果 size 值比原分配的内存空间大,则 realloc 不一定会返回原来的指针,原内存的内容保持不变,但新多出的内存则设为初始值。

最后,如果内存分配成功,则返回首地址;如果内存分配失败,则返回 NULL。

内存分配函数 malloc、realloc、calloc相关推荐

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

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

  2. Linux中free函数头文件,Linux C 堆内存管理函数malloc()、calloc()、realloc()、free()详解...

    C 编程中,经常需要操作的内存可分为下面几个类别: 堆栈区(stack):由编译器自动分配与释放,存放函数的参数值,局部变量,临时变量等等,它们获取的方式都是由编译器自动执行的 堆区(heap):一般 ...

  3. 动态内存分配:malloc、calloc、realloc(超详解析,多维度分析,小白一看就懂!!!!)

    目录 一.前言 二.动态内存的简单介绍

  4. 【C/C++】内存分配函数:malloc,calloc,realloc,_alloca

    [C/C++]内存分配函数:malloc,calloc,realloc,_alloca malloc: 原型:extern void *malloc(unsigned int num_bytes); ...

  5. C语言.内存管理malloc realloc calloc free memset bzero

    =================== malloc realloc calloc free ==================== malloc.calloc.realloc的区别 (1)C语言跟 ...

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

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

  7. 替换libc中的内存分配函数

    2019独角兽企业重金招聘Python工程师标准>>> 摘要: 本文介绍如何替换glibc中的内存分配函数为自定义的内存分配函数的方法,可以方便调试内存分配,和查找内存管理错误而产生 ...

  8. linux c语言 glibc 错误 munmap,Linux内存分配小结--malloc、brk、mmap

    Linux的虚拟内存管理有几个关键概念: 1.每个进程都有独立的虚拟地址空间,进程访问的虚拟地址并不是真正的物理地址: 2.虚拟地址可通过每个进程上的页表(在每个进程的内核虚拟空间地址)与物理地址进行 ...

  9. c语言字符指针分配内存,内存分配函数及使用注意事项,C语言内存分配函数完全攻略...

    C 语言主要提供 malloc.realloc.calloc.alloca 与 aligned_alloc 等内存分配函数来实现对内存的分配功能. 1)malloc 函数原型如下: void * ma ...

最新文章

  1. javaMP3转pcm 百度语音识别
  2. 重庆计算机学校电话号码,重庆计算机学校
  3. 小程序云服务器选什么系统好,小程序云服务器操作系统选择
  4. 二:熟悉 TCP/IP 协议
  5. (程序员版)没人能很轻松的对待工作
  6. iOS学习笔记11 多线程入门
  7. 【转】PLI是什么以及怎么用
  8. zlog 纯C日志函数库
  9. 基于BIM+3DGIS的智慧城市基础设施管理
  10. 滴滴竟然已经投资了这么多公司?
  11. ROS学习(9)自定义移动机器人模型Gazebo仿真
  12. 调用个人微信API接口协议实现群发好友,群发群
  13. 栈中的peek()、pop()和push()、Add()方法
  14. PyTorch学习笔记
  15. linux mtr命令安装,如果mtr没在你的机子上安装
  16. 帮人维护服务器犯法吗,私人做云服务器犯法吗
  17. Python之获取每日涨停板股票数据并绘制K线图!
  18. 超声波的四个特性_超声波的特性
  19. SAP HANA是什么 和SAP Fiori 是什么
  20. 技术更高,设计更远:华为全屋智能设计大赛的审美之跃

热门文章

  1. Linux操作_常用命令操作练习
  2. if the parser found inconsistent certificates on the files in the .apk.104
  3. 双中心单电子积分计算氢分子离子H2+的轨道能量
  4. 对角矩阵和类下三角矩阵的频率和质量数据比较
  5. 5. 连续时间马氏过程-强Markov族
  6. linux java mysql 备份 runtime_Linux下mysql定时备份脚本以及java实现
  7. 【STM32】FreeRTOS 系统配置
  8. 【CoppeliaSim】远程 API 之 Python 控制,对比 V-rep 有些不同
  9. python 如何在linux进行调试
  10. XDR3020 WiFi6 11ax使用体验 11ax性能数据