揮発性のメモ2

知識をメモ書きしておく

gccで、どんな最適化がかかっているかを見る

gcc -Q --help=optimizers

このコマンドで、どんなオプティマイズオプションがあるか、どれが有効になっているか を確認できる

$ gcc -Q --help=optimizers
The following options control optimizations:
  -O<number>
  -Ofast
  -Og
  -Os
  -Oz
  -faggressive-loop-optimizations       [enabled]
  -falign-functions                     [disabled]
  -falign-functions=
  -falign-jumps                         [disabled]
(後略)
-fno-omit-frame-pointer

レジスタEBPを汎用レジスタに使わせないように指示するオプション。
レジスタEBPは本来はスタック用のポインタだけど、-O2とかの最適化オプションを指定すると勝手に使いまわされちゃって、死んだときcore見てもうまくバックトレースできないことがあって嫌なので、それを抑止する

なにも指定しないとdisabled

$ gcc -Q --help=optimizers | grep omit
  -fomit-frame-pointer                  [disabled]

-O2をつけると自動でenabledになる

$ gcc -Q --help=optimizers -O2 | grep omit
  -fomit-frame-pointer                  [enabled]

-fno-omit-frame-pointer でdisabledにおさえつける

$ gcc -Q --help=optimizers -O2 -fno-omit-frame-pointer | grep omit
  -fomit-frame-pointer                  [disabled]