半夜的深思,最近的一些思考。——说了就说了。
有一种不知道从何说起的感觉。最近不知道为啥,一直都在听《爱了就爱了》,Gibson浑厚的声音就是好听,可是买不起……
从爱民兄那里看到他写的东西。很多都是值得学习的。感觉自己应该变成海面,不断的吸收。最近还从我头儿那里,也学到很多东西,看来我这一块海面,根本吸收不过来。宏观的,微观的。都有自己看待问题的思路和独特见解。面对不同的开发形式,环境,都有特定的特长。
头儿给我说了几个小的细节。我说其中两个:
1、Fun(GetTickCount, 100);这个函数传递了两个参数,但是,为什么要这么写?为什么不把两个参数换过来 ?是Fun(100, GetTickCount);呢?在register调用规则下,GetTickCount返回值一定到了eax,顺手就把100给了edx,然后call Fun。不影响代码风格的情况下,效率在增加。要是stdcall呢?反正知道原理了就是了,随便看看汇编就知道了。
2、
begin
First_Tick := 0;
Last_Tick := 0;
Current_Tick := 0;
end;
相信很多人会写这种初始化的代码。但是,这样写更好:
var
Tick: Integer;
begin
Tick := 0;
First_Tick := Tick;
Last_Tick := Tick;
Current_Tick := Tick;
end;
仅仅多了一个临时变量。
但是第一段代码,是对edx不断的xor,赋值一次,xor一次。然后再把edx放到堆栈偏移里面。
而,第二段代码,先xor了eax,然后把eax的值依次放进去。代码效率高了,更易维护。
倘若,有10个,20个,甚至许多个这种初始化,会选择哪一个?
编译器不够聪明,就要告诉他该怎么处理。这些代码的效率提高了近60%。
有人问了,有必要吗?有人问这算什么?你到底在说什么啊。就是几个寄存器操作?
我想说,不同的环境,产生不同的代码应用。如果普通的软件,或许根本不需要。如果是几万人连接的软件,一跑就好几个月的,就要考虑这么多了。
在我们现有的体系下,其实每个软件最终都是机器码,你的代码到底做了些什么,有责任去看看他们到底做了些什么。也许汇编很头疼。但是如果愿意听进去,自然会听进去我说的话。
也许有人认为,有了架构了,有了高级语言了,底层就不应该考虑了。但,我反问一句:有冲突吗?或许架构固然重要,或许代码效率也固然重要,仅仅是思想、方法或者手法。针对某些客户,做出他们需要的东西来卖钱才是最重要的。
对错总是相对的,站在不同的层面去吸收他人的经验,他们自然有他们不同经历的体会。
对于程序员来说,自己总结得与失,学习新的想法都是必要的。吸收他人的经验是其中非常高效的方法,就看心态如何。对于鲁迅先生,我是非常敬佩的,就因为他说的《拿来主义》。孔子说:三人行必有我师,择其山者而从之,其不善者而改之。这个其实谁都知道。并不是每个人都完美无缺,总是有值得学习的地方,值得借鉴的地方。孔子并没有说,其不善者而骂之。
如果反对,何不保留意见?如果有不同意见,可以帮助作者,何不细细道来?互相沟通回带来一种乐趣,我最近深刻体会到这种乐趣。
最近很是感悟老子所说:“天下皆知美之为美,斯恶矣;皆知善之为善,斯不善已。故有无相生,难易相成,长短相形,高下相倾,音声相和,前后相随,恒也。”
对吗?错吗?有意义吗?所知道的就一定是对的吗?
在YY群里,某人要考研,我发表了我对考研的不同看法,但是某个人脱口而出的说:我瞧不起他。我说了吗?我未说一字瞧不起他,我只是说了我和周围的人接触后对考研的看法而已。然后总结:考研是浪费时间。但,适得其反,还不如不说。浪费时间。
说了就说了,爱民兄只是说了自己的总结给需要的人听。愿意取的人,自然会取。不愿意听得人何必打扰别人?
说了就说了,如果说的东西毫无意义
何必要说?
何必要长篇大论的说?
何必要到处长篇大论的说?
何必要到处发疯似的到处长篇大论的说?
何必要开着电脑刷着屏幕发疯似的到处长篇大论的说?
除非说的人有毛病吃饱了撑得。
说了就说了,反正已经说了,你能拿我怎么样?
爱民兄还是:嗓音洪亮,茶不离手,满面红光,天庭饱满而且油光发亮。半年前,爱民兄还是在照片里看见的。半年后就活生生的在我面前鲜蹦乱跳了。
分享其实是一种美德,我暗自庆幸庆幸……
最近感觉时间过的越来越快,堂妹都要坐月子了,唉……人生苦短啊。
再多说就没有意思了。最近忙啊。大家吃好睡好就是最好了。