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 | ||
1 | 37.382 | 148.613 | 2.825 | 136.451 | 37.764 | 151.814 | 2.456 | 149.991 | |
2 | 37.703 | 151.040 | 2.848 | 146.216 | 37.864 | 154.538 | 2.477 | 151.768 | |
3 | 37.837 | 151.075 | 3.190 | 146.900 | 37.879 | 155.150 | 2.799 | 153.830 | |
4 | 38.822 | 151.973 | 3.196 | 149.519 | 38.209 | 156.946 | 2.842 | 157.125 | |
5 | 39.544 | 152.132 | 3.666 | 151.824 | 38.366 | 158.597 | 2.934 | 157.409 | |
6 | 39.638 | 153.143 | 3.795 | 152.730 | 39.298 | 163.389 | 3.936 | 157.713 | |
7 | 40.389 | 157.624 | 4.348 | 157.893 | 40.155 | 166.370 | 3.952 | 160.349 | |
8 | 40.572 | 167.178 | 4.394 | 158.289 | 43.022 | 177.032 | 3.983 | 163.394 | |
9 | 41.560 | 168.936 | 4.665 | 160.102 | 43.408 | 178.278 | 4.296 | 167.465 | |
10 | 42.985 | 178.314 | 5.650 | 163.830 | 44.011 | 178.854 | 4.382 | 175.810 | |
平均 | 39.643 | 158.003 | 3.858 | 152.375 | 39.998 | 164.097 | 3.406 | 159.485 | |
STD.DEV | 1.7054 | 9.46305 | 0.8604 | 7.65778 | 2.3935 | 9.97765 | 0.7302 | 7.35459 | |
GCC 相対 [%] | 速度 | 0.88605 | 3.71366 | -13.27 | 4.45809 | ||||
STD.DEV | 28.749 | 5.15747 | -17.83 | -4.12255 |
ご覧のように概ね Clang の方が少しだけ速い (vim -u NONE だけは違うが、0.45 ms なので、これは誤差範囲としてよいだろう)
ばらつきも少なくとも通常の使い方では Clang の方が小さくなりそう