Clang と GCC の速度を Vim で比較してみた

Clang と GCC でビルドした Vim で起動速度を比較してみた

環境

cat /etc/os-release PRETTY_NAME="Ubuntu 24.10" NAME="Ubuntu" VERSION_ID="24.10" VERSION="24.10 (Oracular Oriole)" VERSION_CODENAME=oracular ID=ubuntu ID_LIKE=debian HOME_URL="https://www.ubuntu.com/" SUPPORT_URL="https://help.ubuntu.com/" BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/" PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy" UBUNTU_CODENAME=oracular LOGO=ubuntu-logo
uname -a Linux xxx 6.11.0-21-generic #21-Ubuntu SMP PREEMPT_DYNAMIC Wed Feb 19 16:50:40 UTC 2025 x86_64 x86_64 x86_64 GNU/Linux

比較方法

vim ‐version VIM - Vi IMproved 9.1 (2024 Jan 02, compiled Xxx xx 2025 xx:xx:xx) Included patches: 1-1258

となるソースを

./configure --with-features=huge --enable-gui=gtk3 --enable-perlinterp=dynamic --enable-python3interp=dynamic --enable-rubyinterp=dynamic --enable-luainterp=dynamic --enable-fail-if-missing CC="$( command which clang )" CFLAGS='-O2'
./configure --with-features=huge --enable-gui=gtk3 --enable-perlinterp=dynamic --enable-python3interp=dynamic --enable-rubyinterp=dynamic --enable-luainterp=dynamic --enable-fail-if-missing CFLAGS='-O2'

の両者およびオプションでビルドした起動速度を比較してみた

具体的には、CUI/GUI とプラグイン等の読み込み有り/無しの次の 4 パターン

vim --startuptime time.log +q
gvim --startuptime time.log +q
vim -u NONE --startuptime time.log +q
gvim -u NONE --startuptime time.log +q

結果

そのぞれの組み合わせで 10 回実行し、速い順に並べて、単位は基本 ms で、「GCC 相対」の行は GCC と比較して Clang が相対的に何%向上しているか? で示している

回数Clang [ms] GCC [ms]
-u NONE -u NONE
CUI GUI CUI GUI CUI GUI CUI GUI
137.382148.6132.825136.45137.764151.8142.456149.991
237.703151.0402.848146.21637.864154.5382.477151.768
337.837151.0753.190146.90037.879155.1502.799153.830
438.822151.9733.196149.51938.209156.9462.842157.125
539.544152.1323.666151.82438.366158.5972.934157.409
639.638153.1433.795152.73039.298163.3893.936157.713
740.389157.6244.348157.89340.155166.3703.952160.349
840.572167.1784.394158.28943.022177.0323.983163.394
941.560168.9364.665160.10243.408178.2784.296167.465
1042.985178.3145.650163.83044.011178.8544.382175.810
平均39.643158.0033.858152.37539.998164.0973.406159.485
STD.DEV1.70549.463050.86047.657782.39359.977650.73027.35459
GCC 相対 [%]速度0.886053.71366-13.274.45809
STD.DEV28.7495.15747-17.83-4.12255

ご覧のように概ね Clang の方が少しだけ速い (vim -u NONE だけは違うが、0.45 ms なので、これは誤差範囲としてよいだろう)

ばらつきも少なくとも通常の使い方では Clang の方が小さくなりそう