Skip to content

Instantly share code, notes, and snippets.

@castaneai
Last active August 29, 2015 14:04
Show Gist options
  • Save castaneai/26f1a5080ef7df5d5c54 to your computer and use it in GitHub Desktop.
Save castaneai/26f1a5080ef7df5d5c54 to your computer and use it in GitHub Desktop.
gccの最適化を実験してみた

gccの最適化を実験してみた

使われてない変数はgccの最適化で消えるのか?

  • void.c
int main(void) {
  return 0;
}
  • unused_var.c
int main(void) {
  int a = 3;
  return 0;
}

この2つを アセンブリコードで出力の-S と最適化の-O2をつけてコンパイル

$ gcc -S -O2 filename.c

そして2つのdiffをとると,

$ cat unused_var.s | diff - void.s
1c1
<       .file   "unused_var.c"
---
>       .file   "void.c"

ファイル名以外は全く同じとなった. やはり,使われない変数は消されている.

ゼロ除算のふしぎ

以下のコードはgccでコンパイル時に警告が出る なぜなら,0で割り算しているから.

#include <stdio.h>
int main(void) {
  int a = 3;
  a /= 0;
  printf("%d\n", a);
  return 0;
}

しかし,以下のように変数に0を入れてからそれで割り算すると警告が出なくなった 変数zeroは実質定数になっているが,そこまでコンパイラは見てくれないか…

#include <stdio.h>
int main(void) {
  int a = 3;
  int zero = 0;
  a /= zero;
  printf("%d\n", a);
  return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment