GCC是GNU Compiler Collection的简称,是GNU的一套编译器集合。TCC是Tiny C Compiler的简称,是法布里斯·贝拉大神在2001年写就的一个C语言编译器,是最小的可实用C语言编译器。

TCC一直是我最爱的软件之一(另外一个是SublimeText3),主要原因是TCC编译速度超快,速度大概是GCC的九倍,编译轻量代码生成的可执行文件体积小,并且可以不生成可执行文件而直接编译运行C代码。另外,TCC可以很轻松地实现自编译,可以在一两秒内完整编译自身生成另一个可以使用的TCC,也就是说,TCC是一个简单而完整的闭系,这是其他编译器所不能比拟的。不得不说,第一次用TCC编译TCC,我真的被震撼到了,对贝拉大神佩服得五体投地。

以前,我总是对GCC嗤之以鼻,因为GCC编译个简短的代码要花几秒,而且生成的可执行文件总是要比TCC生成的大几十倍。直到今天,我才体会到了GCC的强大之处。起因是今天突然想到以前在知乎看到的一个问题,如何以最快的速度求10亿以内所有素数的和,于是又去知乎翻看了一下那个问题的一些回答,期中在即,时间匆忙,算法没怎么看懂,不过还是想玩一玩代码,看下以前写的用欧拉筛来筛选1亿以内的素数的代码是否有优化空间。自己不会优化,便想着看下编译器能否帮优化一下。TCC没有优化功能,也就说-On选项会被忽略,用TCC运行那段代码需要大概800毫秒;GCC不开优化跟TCC基本相同,开启优化后时间消耗直接降到了550毫秒左右,不得不说还是很给力的,算是GCC给我的为数不多的惊喜吧,尽管对那段简单的代码生成的可执行文件的大小,GCC的是TCC的28倍。另外,可能是受到Clang的影响,GCC比较新的版本的代码错误提示还是比较人性化的。这点是TCC不能比的,毕竟TCC的开发者屈指可数,且贝拉大神早已不再进行维护。而GCC因为出生得早,又是Linux系统的必备软件,受众多使用广,所以一直有着众多的开发者在更新和维护。