此类主要有 alloca、calloc、malloc、free、realloc等.
<1>alloca是向栈申请内存,因此无需释放.
<2>malloc分配的内存是位于堆中的,并且没有初始化内存的内容,因此基本上malloc之后,调用函数memset来初始化这部分的内存空间.
<3>calloc则将初始化这部分的内存,设置为0.
<4>realloc则对malloc申请的内存进行大小的调整.
<5>申请的内存最终需要通过函数free来释放.
当程序运行过程中malloc了,但是没有free的话,会造成内存泄漏.一部分的内存没有被使用,但是由于没有free,因此系统认为这部分内存还在使用,造成不断的向系统申请内存,使得系统可用内存不断减少.但是内存泄漏仅仅指程序在运行时,程序退出时,OS将回收所有的资源.因此,适当的重启一下程序,有时候还是有点作用.
其中三个函数的申明分别是:
void* malloc(unsigned size);
void* realloc(void* ptr, unsigned newsize);
void* calloc(size_t numElements, size_t sizeOfElement);
都在stdlib.h函数库内,它们的返回值都是请求系统分配的地址,如果请求失败就返回NULL.
(1)函数malloc()
在内存的动态存储区中分配一块长度为size字节的连续区域,参数size为需要内存空间的长度,返回该区域的首地址.
(2)函数calloc()
与malloc相似,参数sizeOfElement为申请地址的单位元素长度,numElements为元素个数,即在内存中申请numElements*sizeOfElement字节大小的连续地址空间.
(3)
C语言跟内存申请相关的函数 alloca、calloc、malloc、free、realloc
最新推荐文章于 2023-04-27 14:17:11 发布
本文介绍了C语言中与内存管理相关的函数:alloca从栈中申请内存,无需释放;malloc从堆中分配内存,通常需要配合memset初始化;calloc分配并初始化内存为0;realloc调整已分配内存的大小;free释放内存。不释放malloc分配的内存会导致内存泄漏,但程序退出时系统会回收资源。malloc和calloc的区别在于是否初始化内存,realloc可能改变内存地址,并保持原有内容不变。
摘要由CSDN通过智能技术生成