动态内存管理学习心得

通过对动态内存管理一节的学习,我将其总结如下::
如果将动态内存管理比作一部好莱坞爱情剧的话,可将其中的主要函数对象都比作一个个角色:
男主角:
男一:malloc函数:
1.函数的原型void* malloc(size_t)
可以在堆内存区内开辟出长度为size_t大小的连续内存块,并且返回它的首地址
2.使用该函数需要注意当size_t大到一定程度的时候,malloc是难以从堆内存中开辟出如此大的连续内存的,那么这个时候它的返回值为NULL,因此要对它进行判空
3.该函数开辟出来的内存空间并不会被初始化,需要手动对齐进行初始化操做
4.如果size_t==0那莫返回值可能是NULL也可以不是NULL,但是切记绝不可以对其进行解引用操作,不然就是未定义行为
男二:realloc
1.函数的原型voidrealloc(void,size_t)
可以将由malloc或者calloc开辟出来的内存扩大size_t的长度 ,并且返回连续内存的首地址
2.当原来由malloc或者是calloc前面的连续内存拥有值时,realloc函数将会移动内存,并且返回移动后内存的首地址(这个操作非常的吃性能)
3.即使内存发生了偏移,那么这个连续内存中的内容仍然会保存在内存中的低地址中,如果新分配的内存大小较大,那么新内存中的值将会不确定
4.其他规则与malloc相似
男配角:calloc
1.1.函数的原型voidcalloc(size_t)
2.函数的功能和注意事项和malloc相似,只是会将里边的内容初始化为0(这个过程仍旧会吃内存),这个函数其实是很少用的,因为内存初始化不一定要全部初始化为0,即便是初始化为0,那也可以用memset函数来进行操做,因为用它一样非常的吃性能
上述三个函数所开辟出来的内存都不会随函数的结束而释放,必须使用女主来手动释放
女主角:free(只有一个,然而异常之关键)void free(void
)
1.作用:释放由上述三个男主角开辟出来的堆内存.然而绝对不能释放栈内存,在函数中定义的变量,比如char arr[100],如果释放了,那么结果将不可预期
2.如果参数传的是NULL那么它将不会做任何事情
3.free只会释放该指针指向的连续内存块,并不会改变指针的指向
!!!malloc,calloc,realloc所创建的堆内存必须由free释放,不然就会引起内存泄漏(程序猿的噩梦)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值