Lmikic 2016-05-17 13:24 采纳率: 58.3%
浏览 1779
已采纳

C语言内存释放与调用子函数时间变长

各位大神,你们好:
小弟最近用C语言编程遇到这样一个问题(代码比较多,就不粘了,见谅):
在子函数A中用malloc申请内存,在调用函数A的B函数中释放申请的内存。重复运行100次函数B,发现:在函数B中若不释放A的申请的内存,每次A运行的时间基本一样,而内存占用量持续上升;若在函数B中释放A申请的内存,占用内存问题解决了,然后每次调用A的时间又持续上升。
完全没有搞明白这是个什么情况,你们怎么看?

  • 写回答

6条回答

  • rjp203 2016-05-17 13:52
    关注

    堆上的内存申请和释放一定要一一对应,用完就需要释放,不然那块空间就一直被占用着无法再次利用,时间上升的问题可能是你重复申请释放,使得堆内存碎片过于零碎,堆内存管理器内部有个数据结构保存着各块可使用内存空间的大小,每次申请堆内存,内部都会根据你要申请的大小去给你分配空间,如果堆内存过于零碎,就有可能造成分配时间的延长,如果是项目中实际需要频繁的调用和释放堆内存,建议自己建立一个堆内存池进行利用(也就是你自己先预先申请一块足够大的堆内存空间,内部管理这块空间的使用)。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(5条)

报告相同问题?

悬赏问题

  • ¥20 测距传感器数据手册i2c
  • ¥15 RPA正常跑,cmd输入cookies跑不出来
  • ¥15 求帮我调试一下freefem代码
  • ¥15 matlab代码解决,怎么运行
  • ¥15 R语言Rstudio突然无法启动
  • ¥15 关于#matlab#的问题:提取2个图像的变量作为另外一个图像像元的移动量,计算新的位置创建新的图像并提取第二个图像的变量到新的图像
  • ¥15 改算法,照着压缩包里边,参考其他代码封装的格式 写到main函数里
  • ¥15 用windows做服务的同志有吗
  • ¥60 求一个简单的网页(标签-安全|关键词-上传)
  • ¥35 lstm时间序列共享单车预测,loss值优化,参数优化算法