动态内存分配和静态内存分配相关辨析

**

动态内存分配和静态内存分配

1.什么是静态内存分配和动态内存分配

  • 主要体现在时间和空间的不同。静态内存分配是在程序执行之前,由编译器在程序编译阶段实现的,动态内存分配是在程序执行时由程序完成。静态内存分配是在栈中的内存分配,动态内存分配是在堆中的内存分配。内存分配主要根据不同的需求来进行,我们把内存分为三个部分,栈 堆 静态区,栈主要完成函数参数以及局部变量的空间分配,堆主要完成动态内存分配,静态区主要是全局变量以及惊静态变量的存储。

2.两种内存分配的主要区别及意义

  • 对于静态内存分配,是在内存中开辟一块连续的空间,这块空间的大小是固定的,不能随着程序的运行发生改变,这就产生了一个问题,我们不能根据实际问题的需求来改变存储空间的大小,申请空间太小不够用,申请空间太大用不完也是浪费,这就涉及到动态内存分配的好处,它的原理在于,在堆中申请一块存储空间,最终由一个指向这个存储空间的指针来管理,可以根据指针的移动 动态的使用内存,如果空间够用,使用完直接释放(手动释放),如果不够,继续在原来的基础上增加所需的内存(设计realloc函数),知道程序执行结束后,手动释放所有内存空间。使得堆内存的使用更加灵活,不会造成内存空间的大量闲置,提高了内存利用率。

3.怎样实现动态内存分配

malloc函数用来动态申请内存空间 `
 
int *p=(int*)malloc(10*sizeof(int));
if(p==NULL){
	printf("%s",strerror(errno));
} 
else{
	printf("success\n");
	printf("%d\n",p);
}     
free(p);  
printf("%d\n",p);
p=NULL;
(1).例如通过malloc函数申请一块10个int类型大小的内存空间,
(2).判断内存空间时候申请成功,如果不为空,成功(判断很重要,否则一旦开辟失败,指针指向为空,会出现空指针异常)
(3).开辟成功之后,输出p,会出现一个地址,这个地址就是开辟的内存空间的首地址
(4).free函数释放内存空间(注意释放内存空间,指针必须指向动态分配内存的首地址)
(5).注意最后要对指针p赋值为空,因为即使空间被释放,但是这个指针一九会指向这个内存空间,为了安全起见赋值为空

4.注意事项:

(1).空间开辟完毕,一定要进行判断是否开辟成功
(2).使用完一定要记得释放内存空间,如果不释放,随着内存的被占 用,可用内存越来越小
(3).最后最好对指向已释放内存空间的指针赋值为NULL
(4).如果不对内存进行释放,会造成内存泄漏的事故

5.总结:

  • 动态内存分配相比较静态内存分配有很多好处,更加灵活的使用内存,提高内存的利用率,但是在使用malloc函数和free函数搭配使用的时候,一定要注意容易出现的问题,包括后来的celloc函数以及realloc函数等都是对动态内存分配的函数,且性能比起malloc函数有更多优点和后的用法,后续继续分享。

            (博客是对学习知识的总结和感悟,望指正)
    
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值