老兵帅客 发表于 2016-5-5 23:19% U. ^+ l3 J& C7 ^" D+ S8 u
这句话要看年代,现在当然是这样,可是在我刚工作的时候,那是八十年代末期,合格专业程序员做到这点是必 ...
) T: K9 M' U5 I
你要说当年,当年的汇编程序一般会胜过高级语言,但是现在未必了。人脑有极限,一旦代码多了,就很难算清楚了。一百行的汇编,不过一百个指令,是很小一个程序。如果程序大点,可能要涉及几千行汇编,对于人脑而言,太难了,当然不排除有神人。: U# ^: r6 ], }: |. @2 N# v. _
0 K, q! e. e' B! m+ E5 L8 f- W k9 j' G
另外,现在都是精简指令集,如果直接用精简指令集写汇编,会头疼死,编译程序能搞清楚32个,甚至1024个寄存器,人脑够呛。如果是像80x86体系,内核使用精简指令集,外层使用复杂指令集,某些复杂指令,比如串指令,简直比C还复杂,可以将一个数组从一地传输至另一地,这个功能连C都得用循环来实现。1 N/ b" f r4 v& b5 ~ b
9 w' s6 |* ~; a7 F5 c+ t& t另一个问题是,目前的精简指令集(内核),需要考虑数据相关性,如果数据相关,需要对指令进行重排,还要检测假相关性。另外对于断定执行,需要精心安排指令,防止跳转指令预测错误导致整条流水线清空重来。这些问题用人脑来干,是极其头疼的。 X8 A+ v! B7 F. w% P6 f
& b& R: l- T/ z
除此之外,可能还要涉及到各级高速缓冲的管理,可能还要考虑操作系统对内存的管理4 t% I9 H5 E! w( O
4 j& F6 J/ Y, m$ d* u1 m k9 u
而以前并没有这些问题。