【转载】面条式代码
面条式代码汇 编语言的一个主要问题是需要好几条汇编语句才能实现一条高级语言的语句。很多时候,汇编语言程序员发现通过将程序跳转到一些程序结构的中间,可以节约几个 字节或几个周期。在确定这点(并对代码作了相应的修改)后,代码最后会包含一串跳转指令。如果在每条跳转指令和相应的目标地址间连上一条线,最后代码看上 去会像一碗堆起的意大利面条,通常称这样的代码为“面条式(Spaghetti)”代码。
“面条式”代码存在一个主要缺点:可读性差,很难确定它到底完成什么工作。许多程序开始还是结构化的,但性能优化后都变成了“面条式”代 码;但是,实际上“面条式”代码很少是高效的,因为太难确定它到底完成什么功能,从而也很难使用更好的算法来改进。因此,最后导致“面条式”代码比结构化 代码的效率更低。
“面条式”代码的确可能会提高程序的性能,但这只是在对程序做完所有其他可能的改进还不能达到要求时,不得已而采取的办法。开始编写程序 时,要尽量在程序中使用直接的if和switch语句,当程序正常工作并易于理解后,才开始合并代码段(使用jmp指令)。当然,除非真的值得,否则不要 消除程序的结构。
在结构化编程界有一条著名的谚语:“除了GOTO语句,指针是编程语言中最危险的元素”。类似的有:“指针损害数据结构,GOTO损害控制 结构”。换句话说,要避免过量使用指针。如果指针和GOTO语句的结构性较差,那么间接跳转就是最差的一种结构,因为它同时包含了指针和GOTO。因此不 要随意使用间接跳转指令。这会使程序变得难以阅读。毕竟,(理论上)间接跳转指令可以将控制转移到程序中的任何标号处;可以想象,如果不知道指针包含的内 容,又遇到使用该指针的间接跳转指令,要理清程序流程是多么困难的一件事。因此,在使用间接跳转指令时要格外谨慎。
原帖链接:http://codex.