GCC是GNU编译器套装的缩写,是一款优秀的编程语言编译器。对于编译器来说,代码的大小和性能是两个核心因素。而字符优化就是为了优化代码大小。因为在计算机中,字符是以ASCII码的形式存储的,每一个字符占用一个字节(8位)。但是在实际编程中,有很多时候是用不到ASCII码中所有的字符,但是却需要大量的字符来表示代码,这样会导致代码的大小过大。所以GCC选择优化字符,将一些没有用到的字符转化为更小的表示方式,如1字节的整数,从而减小代码的大小。
在GCC中,即使是一个单字符,也会占用4或8字节。所以GCC使用位域结构体,将一个4或8字节的字段分成8个或32个位,每一位只能是0或1,然后将一个字符转化为相应的位,这样一个字符只需要使用1位或一个字节的整数即可表示,这时候一个结构体变量存储的单字符数就可以增加8或32倍了。
例如,存储5个单字符的结构体要占用20-40字节,但是若将单字符使用位域结构体进行优化,则只需要占用5位或5字节,这样就可以大大减小代码的大小。
字符优化主要适用于一些占用空间较大的代码,如大量使用字符串的代码。当代码中存在很多相同的字符串时,可以将这些字符串进行优化,节省空间。但是当需要频繁读取时,字符优化有可能会影响程序的运行速度。
字符优化的方法虽然可以减小代码的大小,但是也存在一定的限制。因为位域结构体是由位(bit)的方式来存储数据的,它的优化效率对于节约内存有非常显著的效果。但是,由于位域结构体的不确定性和难以预测,因此无法保证优化后的结果完全符合原来的预期效果。因此使用字符优化时需要注意,特别是对于加载和存储多个字节的数据组成的代码,请勿使用字符优化。