比如说char*p =malloc(8);
strcpy(p,"abc");
能否只把未使用的内存释放掉,留下"abc"?
C语言中free能否只释放掉部分内存
答案:3 悬赏:10
解决时间 2021-12-16 00:44
- 提问者网友:枯希心
- 2021-12-15 05:57
最佳答案
- 二级知识专家网友:寂寞的炫耀
- 2021-12-15 06:22
看了半天总算明白你的意思了。。。
常规情况下不行的,除非你自己另外实现下内存分配算法。所以这就要求程序员合理使用内存,比如你能确定每次最多就3个字符,那申请的时候就应该只申请4。总之,确保够用,但不要浪费。就和我们平时吃饭打饭一个道理啊~
常规情况下不行的,除非你自己另外实现下内存分配算法。所以这就要求程序员合理使用内存,比如你能确定每次最多就3个字符,那申请的时候就应该只申请4。总之,确保够用,但不要浪费。就和我们平时吃饭打饭一个道理啊~
全部回答
- 1楼网友:单身小柠`猫♡
- 2021-12-15 09:04
只要是经过malloc申请的
在free后都会成功释放
这个是说 可以在程序中再次malloc
比如 你的剩余内存还有100m
这时你malloc了80m
再尝试malloc 30m 肯定会失败的
但你如果把前一个free了
再malloc30m 就一定会成功了。
不过 这时如果你去看系统剩余内存 不一定是准确的。 因为 一方面有延时
另一方面 系统内存管理也是要时间的。
- 2楼网友:嗷呜我不好爱
- 2021-12-15 07:29
内存是按块分配的,在内存管理里面,所有可以分配的内存就像诸多果实一样挂在一颗大树上。
分配内存的时候,会按照所给的大小在树上找到合适大小的果实;在释放的时候,将整个果实全部回收。
没有买梨子吃一口再还给店家的道理的。
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯