当前位置: 首页 > news >正文

自动内存管理技术的思考

我是一个学过一点c++语言的人。在c++中,没有自动内存管理,却有很多可以值得借鉴的思路。

我认为一个内存,申请了,却不用,然后,不用了,却不释放,都是一种资源浪费,而不是说,程序最终都会在某一个时刻回收释放就叫防止内存泄漏了。就算有一小部分内存我是永远都用不上,泄露了,而相对有大部分内存不能好好利用上,那个更加不合理?因此,内存泄露是很广义的,程序应该协调好,提高内存利用才是正道。

.net框架的内存管理问题,在于对释放点的不确定,宏观的管理有时候是好的,但是程序往往有局部性,对细颗粒的控制往往是稳定性和性能的关键。至于如何提高这些内存的利用率,我觉得还是c++那套实在,什么时候用,什么时候申请,什么时候不用,什么时候释放。

在函数的的变量,是在栈中申请的,会在函数结束后,完成释放。这是一个内存管理的典范。

而建立在堆上的动态申请的内存,才是万恶的根源。当然,动态内存是有很多使用价值的。c++的做法是利用类的机制,创建的时候申请内存,消亡的时候释放内存,非常有效。虽然默认是手工实现,但是也能使用点技术手段达到自动管理。

真正的问题在于类的对象成员。对象成员可以指向自身,也可以指向另一个对象,那个对象又有对象成员指向出发对象,等等而形成一个回路。

因此,总结导致复杂性的问题根源在于:

1.对象(如.net 的类实例,而不是结构实例)

2.对象的对象成员

3.对象的对象成员的类延伸出去,最终在某个类有兼容出发类型的成员对象。

这些是必要而不是充分的条件。但是从这些条件,改进编译器,让其识别出来,也能够简化不少情况的处理。

然后让我们直面惨淡的对象回路问题吧。

对象回路在结构上来说,类似有多个根节点,然后加一个有向网路,网路节点可能还有一些没有回路的枝叶。

释放的条件是:

1.根节点等于0整个结构释放

2.任意一节点的引用计数等于0,释放该节点和减少后继结点计数

转载于:https://www.cnblogs.com/Nobel/archive/2010/02/08/1665853.html

相关文章:

  • centos7 开启特定的端口
  • 每天学一点Scala之声明变量
  • 仿腾讯留言效果(拖动分页)
  • Window 包管理工具: chocolatey
  • 用于主题检测的临时日志(a6578c68-6d46-43af-917d-9f5080ef3e4d - 3bfe001a-32de-4114-a6b4-4005b770f6d7)...
  • 【iCore4 双核心板_ARM】例程五:SYSTICK定时器 实验——定时点亮LED
  • c# 错误和异常处理
  • http://blog.csdn.net/renwuqiangg/article/details/53088720
  • 利用XML序列化实现程序配置文件
  • 想要快速搭建开发测试环境?这么做就可以!
  • 漂浮广告,IE,FireFox下兼容,多个漂浮不冲突
  • 需求引导设计 切莫教条主义
  • RSA简介(三)——寻找质数
  • 北京初“探”,还是初“谈”
  • 售前支持服务流程设计的考虑
  • [数据结构]链表的实现在PHP中
  • 【翻译】babel对TC39装饰器草案的实现
  • 10个确保微服务与容器安全的最佳实践
  • ES6系统学习----从Apollo Client看解构赋值
  • IIS 10 PHP CGI 设置 PHP_INI_SCAN_DIR
  • js 实现textarea输入字数提示
  • Next.js之基础概念(二)
  • React Transition Group -- Transition 组件
  • Redis的resp协议
  • seaborn 安装成功 + ImportError: DLL load failed: 找不到指定的模块 问题解决
  • 盘点那些不知名却常用的 Git 操作
  • 前端技术周刊 2018-12-10:前端自动化测试
  • 手机端车牌号码键盘的vue组件
  • 微信如何实现自动跳转到用其他浏览器打开指定页面下载APP
  • 移动端唤起键盘时取消position:fixed定位
  • 原生JS动态加载JS、CSS文件及代码脚本
  • 在 Chrome DevTools 中调试 JavaScript 入门
  • 正则表达式小结
  • 《天龙八部3D》Unity技术方案揭秘
  • Nginx惊现漏洞 百万网站面临“拖库”风险
  • 仓管云——企业云erp功能有哪些?
  • 长三角G60科创走廊智能驾驶产业联盟揭牌成立,近80家企业助力智能驾驶行业发展 ...
  • ​Java并发新构件之Exchanger
  • (03)光刻——半导体电路的绘制
  • (11)MATLAB PCA+SVM 人脸识别
  • (echarts)echarts使用时重新加载数据之前的数据存留在图上的问题
  • (ISPRS,2023)深度语义-视觉对齐用于zero-shot遥感图像场景分类
  • (分享)自己整理的一些简单awk实用语句
  • (学习日记)2024.01.09
  • (一)u-boot-nand.bin的下载
  • (原)记一次CentOS7 磁盘空间大小异常的解决过程
  • (转)甲方乙方——赵民谈找工作
  • (转)平衡树
  • .net mvc actionresult 返回字符串_.NET架构师知识普及
  • .NET使用存储过程实现对数据库的增删改查
  • .NET应用架构设计:原则、模式与实践 目录预览
  • /bin、/sbin、/usr/bin、/usr/sbin
  • /etc/X11/xorg.conf 文件被误改后进不了图形化界面
  • [ IOS ] iOS-控制器View的创建和生命周期
  • []FET-430SIM508 研究日志 11.3.31