查看单个帖子
  #110 (permalink)  
旧 2008-03-11
Elminster 的头像
Elminster Elminster 当前离线
超级版主
 
注册日期: 2002-09-09
帖子: 1,764
Elminster 正向着好的方向发展
默认 回复: 请教各位大大关于动态内存管理的问题……

引用:
to Elminster:
1.永远都不会有富余资源,因为我们无法假设用户在使用我们的软件的同时不会想要使用其他软件做其他事……
这一条没什么意义,如果用户一定要在玩 WOW 的同时开 Photoshop 做滤镜同时开 3DMAX 做渲染同时开 MATLAB 跑科学计算,谁也救不了这个用户。开发任何一个软件,我们都必须划条线,假设它能够得到多少资源,在这个框架之下工作,而不是不顾一切地把资源消耗往下压。

引用:
2.硬件发展永远不会足够,因为当硬件性能增长了10%时,用户需求会增长得比10%更多。现在的硬件比起几十年前要强劲得太多,但是对于那些主流游戏,有多少电脑能够一直使用最佳的画质?对于那些常用软件,有多少在启动时完全不需要用户等待?无论是浏览器、office套件还是娱乐软件之类之类……有多少大型软件在出新版本时不需要用户升级硬件也能获得跟以前一样的性能?更何况很多普通用户没有能力或兴趣来优化自己的电脑……
这个问题确实存在,但你得分清楚硬件的瓶颈在哪。主流游戏不能用最佳画质,是内存不够的问题吗?大型软件启动时候需要用户等待,是内存不够的问题吗?相信不用我来多说吧?

引用:
3.我不需要复习也知道抢占,但是这只是在线程之间的协调机制。当你的线程获得了一定的时间片后,如何使用它是你自己的事情,相信这不需要复习也不难理解。
这就是偷换概念了。我们讨论的问题是“CPU 这个资源由谁来管理”,对不对?你的线程既不能决定什么时候能够获得 CPU 运行,也不能决定自己什么时候被其他人抢占,所以 CPU 完全是由 OS 管理的,程序员没有控制权,这话没错吧?

引用:
4.如果只看服务器而不看桌面电脑,那我也可以指着超级计算机说:“因为有这样的东西存在,所以任何软件优化都是多余的”。更何况及时在超级计算机上,软件优化也是很重要的。硬件的发展是为了让用户做更多的事情,而不是为了让软件开发人员挥霍。
不要把我的观点推向极端。我没说不需要做优化,但是你要弄清楚瓶颈在哪里,什么地方是值得做优化的。看看如今的 PC 就知道了:对于 99% 的用户来说,不能做更多事情的硬件瓶颈,是内存吗?

引用:
5.是否不使用gc就必然延长开发周期?是否使用了gc就必然缩短开发周期?是否使用了gc就不仅能必然缩短开发周期而且还必然不带来其他副作用?
从统计意义上讲,就是这样没错。

引用:
6.在我看来,内存管理的麻烦的根源就在于生命期模型。如果有个机制能够确保在内存块的生存期结束时就*一定*、*准时*调用我所指定的行为,并且对这行为没有太多限制,那么内存管理还有什么难处呢?特别是对于应用程序,剩下的无非是内存池之类之类的,这和其它非内存资源的管理比起来又能困难多少?
这话忒外行了。内存管理的难点,从来都是如何杜绝悬挂引用和内存泄漏,前者导致程序崩溃,后者“挥霍宝贵的内存资源”,根本不是什么“在内存块的生存期结束时就*一定*、*准时*调用我所指定的行为”。GC 真正的价值,就是在很大程度上解决了这两个问题,从而上程序员可以放心的运用更多能够提高生产力的技术。

引用:
7.不知道那些设计gc的人有没有信心说“彻底”解决内存管理问题。
没有任何技术可以“彻底”解决内存管理问题。

引用:
8.如果某个非内存资源是信用卡读写器(哪怕只是使这张卡作废也会让用户恼火的),如果某个非内存资源是指向某个机密数据库的连接,如果某个非内存资源是指向某个人的照片目录的文件描述符而错误的访问导致其内容被发送至网络或打印机……

9.如果某些网络连接管理出错,导致不同用户之间的数据包的混乱,那么可能多个用户的账户信息会被搞乱,而这在运行时不会有什么明显的征兆。如果内存访问导致程序崩溃,大多数用户只会习惯性地重启软件,可是其他方面的正确性用户往往不会每次都检查的……如果你能保证软件交付给用户后100%不出问题那当我没说。
我从来没说过非内存资源的管理不重要,我说的是非内存资源管理起来难度要低得多。而且,你这里的描述,例如“如果某些网络连接管理出错,导致不同用户之间的数据包的混乱”,和网络连接管理有关系么?网络连接管理负责建立和拆除网络连接,读进来的数据包怎么处理,会不会弄乱,也属于网络连接管理的范畴?

…………

也累了。以后再说吧。
回复时引用此帖