关于Tail Calls Optimization,中文资料不是很多。但这也不是很难的概念。
所谓Tail Call,就是指一个函数返回的值,为另一个函数的返回值。例子如下
foo()中调用函数bar()产生的栈空间是多余,所以支持Tail Call Optimization的编译器都能优化此过程,消除多余的栈操作。
关于算 factorial ,代码如下:
严格意义上来说,并不是tail call,但是GCC竟然能神奇地将它优化成一个递推式!而VC,ICC,pgcpp都不能做到这样的优化。
看来确实是,不同编译器有自己的强项。