昨晚,反汇编写汇编代码,调试着程序,发现 我使用 API函数 申请了一小部分的内存,可是实际内存比我所得到的要多得多,因为在我代码下方竟然有很多00 00 00 的空代码。
一大早起来后,又想起了自己以前在ICPC上做的一道题目,这道题目需要一个10000个以内基数的int数组,初次看到这个,我的第一反应是采用动态分配内存,因为我并不知道程序会给我多少个输入数,所以我就想用动态的方式,你输入一个数,我就给这个数分配一个内存,结果呢?超时了。。。。。。数值太大了,花的时间就很多,查看了高手的代码,结果让我郁闷了半天,他们居然为了方便 一口气直接申请了10万的int 数组,运行结果如何呢?快!实在太快了,无论多大数量的值,一输入就有了结果,而我的,却需要等一两秒,很明显,申请空间的过程占用了,很多的运行时间。
在空间上,如果ICPC系统真的给出10000个数,动态申请空间的方式将会是直接定义数组的方式 空间大小的两倍。速度也会慢上很多。但是假如,如果实际情况少于10000个数呢?少量的数值,可以使得动态分配空间的时间忽略不计吧。那么 直接定义数组的方式将会浪费掉很多的空间。在不确定输入值数量的情况下,这样的方式很难取舍。
怎样做,才能充分利用内存,时间又快很多呢? 我想能否将两种方法结合起来,我动态申请很多内存,进行运算,如果不够,我再次申请一部分内存。 这样时间或许没有 直接定义数组的快,但一定比动态申请空间的方式快很多。在空间占用上也是出于两者的中间。
写在这里,我忽然有一种想法,如果,假设现有的计算机在没有浪费空间与时间的前提下,这样的1.4G双核的计算速度,杜绝了一切浪费的前提下,这效率是否也是一种极致?是否普通的一台微型台式机,效率能与一台高配置台式机相抗衡?
到了这里,我想到了游戏,大型的3d游戏,电脑运行时总会占用很多的CPU,甚至长期的100%,类似于3d图形的设计,如果渲染设计能够将人看不到的地方,例如 角色面对我们时候,角色的背面,是我们看不到的,但是3D程序也一样给画出来了,如果能忽略掉(假设技术上可行。) 那么这个浪费完全可以省下很多的资源。
哎,对于网络开发者,一台服务器是很重要的,世界上并不是每一个人都有那么多的钱可以供我们挥霍,相当的一部分爱好者们,恐怕都觉得租用服务器是一种不划算的行为,如果我们能充分的利用现有的资源,一个台式机?一台笔记本?我们将其资源最大化,我们量身为其设计操作系统,我们将所有的资源用于所需要用到的刀刃上。低成本换来回报?那能实现我们的梦显得同时,我们又不必付出太多的资金。
期待这样的一天。