QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 730|回复: 4

一些原来似乎明白但最近又想不通的问题

[复制链接]
发表于 2004-4-8 15:27:08 | 显示全部楼层 |阅读模式
其实这个问题在windows和linux下都存在,现象如下:
刚刚启动系统后察看内存使用了80兆,这时我打开了一些软件并使用内存使用量
达到了160但未使用虚拟内存,这是我退出这些程序,内存使用了130兆。我又打开了其他不同的应用程序内存变为200兆,然后又关闭,内存变为160兆。

其实刚刚接触这问题时被告知是由于系统为了加快软件启动速度将一部份的动态库和共享库加载到内存,所以程序退出后一部份的共享库还在内存而产生了这个现象。

但问题出来了,假如我有20个大型软件都用到了许多不同的动态库,然后我都启动了一遍那我的内存消耗该有多厉害啊,就算我将程序都退出了但那些库就把我的内存吃光了,那那。。。。如果这时又运行了一个耗内存的程序确被告知内存不足怎么办,就算不会那也会应为内存不足而大量使用交换区软件的执行速度完全没保障,如果想要运行流畅的话难道只有重启么?而且我观察了相当一部份人冲启机器最大的原因不是系统崩溃,就是内存消耗太厉害程序运行不流畅啊。
那我们在使用动态库时完毕后如何让它完全退出?
发表于 2004-4-8 16:14:05 | 显示全部楼层
关于内存驻留的问题,我想大部分是引用技术的问题造成的。
比如windows下的使用com的程序,如果你在编写得时候,引用计数控制的不正确,
那么当你的程序退出时,com库并不能自动释放。所以你的内存就被占用了。

Linux下面现在不知道这些bonobo组件或者dcop组件是怎么实现的。不过Linux下面的内存利用是很有效率的,即使你拷贝文件,它也会优先使用内存。

一个例子,我从我的CF卡上拷贝约200兆的文件到一个目录,第一次拷贝用了很长的时间,然后我将CF卡上的文件move到另外一个目录,结果这次的速度十分的快,我想是第一次拷贝的时候我的文件内容已经放到内存里了。然后move的时候mv知识删除了文件名称,没有真正从CF卡上面读取数据,而是直接使用了内存里面的数据。(之所以用CF卡,是因为可以非常明显的感觉到速度上的差异)
回复

使用道具 举报

发表于 2004-4-8 22:40:37 | 显示全部楼层
younker, 有没有考虑过文件系统在其中起的作用呢?
回复

使用道具 举报

发表于 2004-4-9 00:44:09 | 显示全部楼层
建议你找内存管理的书看一下“写时复制”有关的内容。
回复

使用道具 举报

发表于 2004-4-9 09:18:14 | 显示全部楼层
很大一部分内存被用作缓冲区了,这问题已经讨论过很多次
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-8 16:59 , Processed in 0.042096 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表