问答

有没有必要手动写释放内存代码?

作者:admin 2021-06-07 我要评论

很困惑,我目前正在写一个多进程程序,但是遇到一个令我纠结的问题:我在程序运行中调用某个函数分配了一块堆内存,这块内存只分配一次且程序运行时一直需要用到...

在说正事之前,我要推荐一个福利:你还在原价购买阿里云、腾讯云、华为云服务器吗?那太亏啦!来这里,新购、升级、续费都打折,能够为您省60%的钱呢!2核4G企业级云服务器低至69元/年,点击进去看看吧>>>)

很困惑,我目前正在写一个多进程程序,但是遇到一个令我纠结的问题:我在程序运行中调用某个函数分配了一块堆内存,这块内存只分配一次且程序运行时一直需要用到,也就意味着这段内存是没必要释放的,程序结束自动回收

所以纠结在:那我还需要自己写释放内存的代码吗? 如果不写, 会不会给人一种不靠谱的感觉? 可写了会导致代码不必要的冗杂(我写的是多进程程序,意味着所有子进程都得释放,父进程也得释放)。

你们觉得有没有手动写释放代码的必要?

###

需要写。
有一个概念叫技术债,也就是说为了图快而落下的问题堆积起来,你迟早要还的。^ ^
c/c++中申请的内存需要手动释放,或者使用raii/智能指针,不释放会造成内存泄露。
虽然你现在的程序很简单,也知道进程退出后,操作系统会回收,但是程序不是一成不变的,当需要扩展功能或者代码重构的时候,这个申请内存可能就不是一次性的,当进入一个程序的循环或者用户多次调用的时候,就会出现可怕的内存泄露,当出现问题的时候,查起来也是相当麻烦的,相比之下,多写一个手动释放的代码就在编码前期就能把bug扼杀在摇篮里。
代码不能只追求功能性,代码质量更多的讲求可阅读,可维护,可扩展以及健壮性。
好的习惯和严格要求是进步的基础。
对你写下的代码充满热情和足够的敬畏。

###

楼主的问题工作中遇到过,虽然这片内存在程序运行过程中一直用到,主进程退出后自动释放,程序中不处理释放看也没啥问题,但从编程规范和习惯上看,最好还是把手动释放的工作写上,如果有Coverity代码扫描工具检测的话,会有提示错误的。

###

你可以写一个简要的追踪程序,追踪这块内存区域的使用情况,留个日志,日后分析日志来分析多次运行内存使用是否有问题或不妥当之处。

版权声明:本文转载自网络,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本站转载出于传播更多优秀技术知识之目的,如有侵权请联系QQ/微信:153890879删除

相关文章
  • 有没有必要手动写释放内存代码?

    有没有必要手动写释放内存代码?

  • websocket心跳重连机制 , 有心跳但不知

    websocket心跳重连机制 , 有心跳但不知

  • jquery如何实现给标签加一个父级标签?

    jquery如何实现给标签加一个父级标签?

  • 8086 CPU的 CS寄存器为何会使用4个16进

    8086 CPU的 CS寄存器为何会使用4个16进

腾讯云代理商
海外云服务器