内存分配函数 malloc、realloc、calloc
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相关推荐
- c语言释放内存函数,【C语言】内存分配函数malloc/ calloc/ realloc及内存释放free
前言: 内存区域划分与分配: 1.栈区(stack)--程序运行时由编译器自动分配,存放函数的参数值,局部变量的值等,程序结束时由编译器自动释放. 2.堆区(heap) -- 在内存开辟另一块存储区域 ...
- Linux中free函数头文件,Linux C 堆内存管理函数malloc()、calloc()、realloc()、free()详解...
C 编程中,经常需要操作的内存可分为下面几个类别: 堆栈区(stack):由编译器自动分配与释放,存放函数的参数值,局部变量,临时变量等等,它们获取的方式都是由编译器自动执行的 堆区(heap):一般 ...
- 动态内存分配:malloc、calloc、realloc(超详解析,多维度分析,小白一看就懂!!!!)
目录 一.前言 二.动态内存的简单介绍
- 【C/C++】内存分配函数:malloc,calloc,realloc,_alloca
[C/C++]内存分配函数:malloc,calloc,realloc,_alloca malloc: 原型:extern void *malloc(unsigned int num_bytes); ...
- C语言.内存管理malloc realloc calloc free memset bzero
=================== malloc realloc calloc free ==================== malloc.calloc.realloc的区别 (1)C语言跟 ...
- c语言中alloc作用,C语言内存分配 :malloc()函数与alloc()函数
C语言跟内存分配方式 (1) 从静态存储区域分配.内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在.例如全局变量,static变量. (2) 在栈上创建.在执行函数时,函数内局部变 ...
- 替换libc中的内存分配函数
2019独角兽企业重金招聘Python工程师标准>>> 摘要: 本文介绍如何替换glibc中的内存分配函数为自定义的内存分配函数的方法,可以方便调试内存分配,和查找内存管理错误而产生 ...
- linux c语言 glibc 错误 munmap,Linux内存分配小结--malloc、brk、mmap
Linux的虚拟内存管理有几个关键概念: 1.每个进程都有独立的虚拟地址空间,进程访问的虚拟地址并不是真正的物理地址: 2.虚拟地址可通过每个进程上的页表(在每个进程的内核虚拟空间地址)与物理地址进行 ...
- c语言字符指针分配内存,内存分配函数及使用注意事项,C语言内存分配函数完全攻略...
C 语言主要提供 malloc.realloc.calloc.alloca 与 aligned_alloc 等内存分配函数来实现对内存的分配功能. 1)malloc 函数原型如下: void * ma ...
最新文章
- javaMP3转pcm 百度语音识别
- 重庆计算机学校电话号码,重庆计算机学校
- 小程序云服务器选什么系统好,小程序云服务器操作系统选择
- 二:熟悉 TCP/IP 协议
- (程序员版)没人能很轻松的对待工作
- iOS学习笔记11 多线程入门
- 【转】PLI是什么以及怎么用
- zlog 纯C日志函数库
- 基于BIM+3DGIS的智慧城市基础设施管理
- 滴滴竟然已经投资了这么多公司?
- ROS学习(9)自定义移动机器人模型Gazebo仿真
- 调用个人微信API接口协议实现群发好友,群发群
- 栈中的peek()、pop()和push()、Add()方法
- PyTorch学习笔记
- linux mtr命令安装,如果mtr没在你的机子上安装
- 帮人维护服务器犯法吗,私人做云服务器犯法吗
- Python之获取每日涨停板股票数据并绘制K线图!
- 超声波的四个特性_超声波的特性
- SAP HANA是什么 和SAP Fiori 是什么
- 技术更高,设计更远:华为全屋智能设计大赛的审美之跃
热门文章
- Linux操作_常用命令操作练习
- if the parser found inconsistent certificates on the files in the .apk.104
- 双中心单电子积分计算氢分子离子H2+的轨道能量
- 对角矩阵和类下三角矩阵的频率和质量数据比较
- 5. 连续时间马氏过程-强Markov族
- linux java mysql 备份 runtime_Linux下mysql定时备份脚本以及java实现
- 【STM32】FreeRTOS 系统配置
- 【CoppeliaSim】远程 API 之 Python 控制,对比 V-rep 有些不同
- python 如何在linux进行调试
- XDR3020 WiFi6 11ax使用体验 11ax性能数据