动态内存管理技术是什么意思,动态内存管理器
Yyds干货库存
前言在上一篇博客里,我更新了通讯录动态内存的升级版,里面涉及到一些关于动态内存的知识。没学过的可以看这里!
在介绍动态内存之前,我们需要了解一些内存知识。我们通过一张图来简单了解一下。
相对于动态记忆这个模糊的概念,其实顾名思义,动态记忆是可变的。
malloc函数需要引用头文件#include stdlib.h,malloc函数打开的空间是动态的。代码演示了10个int类型的空间,也就是40个字节,应用到内存中,应用的空间放在指针p中,因为malloc是void类型,所以需要强制类型转换。P=(int *) malloc (10 * sizeof (int)),这是一种标准的写法。需要n * sizeof (type)才能打开空间。我们每次动态申请空间都要判断申请成功与否,因为动态内存并不是100%保证成功的。如果应用成功,我们将编写一个输出代码并打印0-9。当时用完动态内存后,我不得不使用free函数来释放应用的动态内存,并将其返回给操作系统。如果我不释放内存,随着时间的推移,内存会阻塞free(p);p==NULL将P赋值为空指针,防止P接触这个空间,成为干扰其他代码运行的通配符指针。
#包含stdlib.h
#包含错误号h
int main()
{
int * p=(int *)malloc(10 * sizeof(int));//申请内存中10个整数类型的空间,并且(int*)是强制类型转换,因为malloc是(void*)类型
If (p==NULL)//应用程序失败,并返回一个空指针。
{
printf(%s\n ,strerror(errno));//打印错误代码
}
否则//申请成功,空间正常使用。
{
int I=0;
for(I=0;i 10我)
{
*(p I)=I;
}
for(I=0;i 10我)
{
printf(%d ,*(p I));
}
}
//当不再使用动态应用的空间时
//应该返回给操作系统
免费(p);
p=NULL//现在空间被释放了,主动给P赋一个空指针,防止P再接触这个空间。
返回0;
}
Calloc函数calloc和malloc函数的用法几乎一样,差别不大(10,sizeof(int))。请注意,还有一个不同之处。calloc应用的space会将space的元素值初始化为0,用来满足不同程序的需要。打印出来可以看看。注意腾出空间。
#包含stdlib.h
#包含错误号h
int main()
{
int* p=(int*)calloc(10,sizeof(int));
if (p==NULL)
{
printf(%s\n ,strerror(errno));
}
其他
{
int I=0;
for(I=0;i 10我)
{
printf(%d ,*(p I));
}
}
免费(p);//释放空间
p=NULL
返回0;
}
realloc函数可能在这里,大家还是一脸懵,想着怎么让空间变变量。好了,来了!他来了!她在往前走!他是realloc函数。前面的malloc和calloc函数都是动态创建的,但是要想让空间真正变大或变小,必须使用realloc函数。它的功能是调整动态创建的内存空间的大小。我们还是用malloc动态创建一个20字节的空间,然后把0到4的数字打印出来,但是我后悔了。我想打印从0到9的数字。但是缺少20字节的空间,所以使用realloc函数,int* ptr=realloc(p,40)。这是标准的书写方式,这里的40开辟了额外的20字节空间。
#包含stdlib.h
#包含错误号h
int main()
{
int * p=(int *)malloc(20);//打开20个字节
if(p==NULL)
{
printf(%s\n ,strerror(errno));
}
其他
{
int I=0;
for(I=0;i5;我)
{
*(p I)=I;
}
}
int* ptr=realloc(p,40);
如果(ptr!=空)
{
p=ptr
int I=0;
for(I=5;i 10我)
{
*(p I)=I;
}
for(I=0;i 10我)
{
printf(%d ,*(p I));
}
}
免费(p);//释放内存
p==NULL
返回0;
}这里只是malloc打开的20字节空间。假设这里的20字节不能满足我们的需求,但是我们希望能够使用40字节的空间。下面介绍如何使用realloc来调整动态打开的内存。realloc的说明:1。如果P指向的空间后有足够的内存空间,直接追加,返回p2。没有足够的内存空间,那么realloc会重新开辟一个满足需求的新内存空间,并将原来空间中的数据复制回来,释放旧内存空间,最后返回新开辟内存空间的地址。3.用一个新的变量ptr来接受realloc函数的返回值(防止P指向的空间因为开放空间不足而丢失)。
free函数free与malloc、calloc和realloc函数一起使用,释放动态打开的空间。
,转载请联系作者取得转载授权,否则将追究法律责任。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。