gcc 4.0 の visibility support

gcc 4系での新機能に visibility support ってのがある.http://gcc.gnu.org/wiki/Visibility

この"visibility" ってのは,シンボル名を公開するか非公開にするか,つまり外部から見えるか見えないかの属性のことみたい.具体的には,次のように使う.

__attribute__ ((visibility("default"))) void global_function()
__attribute__ ((visibility("hidden")))  void local_function()

これにより

  • 共有ライブラリのサイズを5〓20%ほど小さくできる.
  • 共有ライブラリのロード時間を短くできる.

などの効果が得られるとのこと.

5〓20%といえばかなりの割合である.手元のlinuxでは /usr/lib 以下の *.so だけで300MB近くあることから,gcc4でビルドしなおすだけでシステム全体で50M〓100MBぐらいHDDを節約できる可能性がある.