- 论坛徽章:
- 0
|
请教高手:如果扩大程序使用的栈空间?
原帖由 "FH"] [/quote 发表:
正像FH的签名所说,FH追求的是精练和完美,这大概也是当年玩汇编时养成的习惯吧?
FH的机器档次不高,没有多少物理内存。FH知道,如果物理内存不足时,操作系统会将物理内存交换到虚拟内存(即硬盘)当中去,况且操作系统是多任务的,如果有1G的内存,但有每个占用200M内存的10个任务,还是会在任务切换时进行内存交换的,这样,所谓的内存访问快速的优势已经不明显了。同时,任务的切换是频繁的,因而频繁的交换会导致系统整体速度变慢(因为经常要进行200M的磁盘IO),追求速度所得到的结果可能恰恰相反。这也就是FH一贯不主张应用程序使用过多内存的原因。
追求精炼和完美, 大约反对的人不会多.
你下面所说的道理也对, 似乎不应该反驳. 但这道理, 又似乎只是教科书类的泛泛而谈. 应用于具体的项目时, 则应该具体考虑.
我现在手上拿着一个GPS接收器, 它内含一个电子地图软件和接受信号的程序, 它没有磁盘, 只有内存, 那几十兆的存储器内, 除了地图数据外, 就都是这软件可用的了, 这软件把内存都用光, 也不会有别的程序来抗议.
Oracle 和 DB2 等数据库号称能管理多少个TB的数据, 若你用它们为一像样一点的公司建立一个管理系统, 大约这服务器上, 不会再允许运行许多其他软件. 如果你一定要同时在上面运行许多其它程序, 大概ORACLE, DB2们会要求你为达到什么性能, 就必须为它们预留多少物理内存, 否则就不能满足性能要求
当然, 它们也会自己检测有多少物理内存可用, 以决定自己的存储分配
若一台机器不能满足要求时, 还可能采用 CLUSTER 或所谓的联邦结构 (Federation Structure), 这情况下, 软件自然是尽可能多的霸占系统内存了. 当然, 这时候的存储管理, 任务调度就都是自己的任务了, 而不能交给操作系统, 由一个你不可知的东西来控制.
记得许多年前, 个人的股票分析软件都是把数据作为一个个文件放在盘上, 但需要的时候就去盘上读, 因为只一台机器, 速度很快, 占用内存很小, 同时还可以玩游戏, 或做其他工作. 当需要为一大型网站提供一个股票数据系统的时候, 那速度就不可忍受了. 所以只好把所有的数据(几百兆)全放在内存里面, 这服务器还有能力做别的, 但在用户访问量比较大的时段, 一切其他任务都是不允许在这机器上运行.
罗里罗嗦说了这么多. 也不知说清楚没有, 只想说明一点, 具体问题, 具体考虑. 是否使用内存过多, 要看情况, 何况做项目还有人力, 资金, 时间, 可靠性等等考虑和约束.
若还没说清楚, 大概我下次只好改名叫 罗里罗索夫, 像个俄罗斯人的名字  |
|