例えば、

void func() {
	int *a, *b;
	int i;
	int sum = 0;
	a = malloc(sizeof(int)*10);
	b = malloc(sizeof(int)*10);
	for (i=0; i<10; i++) {
		b[i] += a[i];
	}
}

こういうのくらいエラーチェックが無くなってくれてもよいのだが、無くなっているようには見えない…

void func2(int *p, int n) {
	int i;
	for (i=0; i<n; i++) {
		*p += i;
	}
}

あとこういうのとか。

http://www.rcis.aist.go.jp/project/FailSafeC-ja.html

Fail-Safe C では、コンパイル時や実行時の様々な最適化手法を組み合わせることで、実行時検査のオーバーヘッドの削減を行っています。

とあるのだが。うーん。

  • C言語の深い理由があって検査を削減できない
  • デバッガとか他のプロセスがメモリ配置を換える可能性があることを考えるとこのぐらいやって当然
  • 実装サボってるだけ
  • これでもかなり削減してある
  • 僕の使いかたがおかしい
  • オーバーヘッドがあるように見えるが見間違い
  • オーバーヘッドがあるように見えるが大したことは無い


一個でもいいからオーバーヘッドが削減されている例を知りたいが。