GCCについて part8at TECH
GCCについて part8 - 暇つぶし2ch661:デフォルトの名無しさん
08/12/21 18:30:50
アサートの数を減らしてみて
どこを減らせばどのくらい時間が変わるか見てみたら?

662:デフォルトの名無しさん
08/12/21 18:35:33
> つまり-Eは一瞬で、asに時間がかかっているという解釈で正しいんでしょうか?

どう見てもcc1だろ時間かかってるのは。

-Q ってオプションがあるので試してみ。

663:デフォルトの名無しさん
08/12/21 19:00:41
-Sの時間が-cよりかかってるってことは、コードが相当大きくなってる?

664:デフォルトの名無しさん
08/12/21 19:51:11
プリプロセスだけして出てきたコードはどれくらいになっとるかね

665:デフォルトの名無しさん
08/12/21 20:20:12
どんな最適化しているの?
でかいファイルでインタープロシージャルな最適化まで
やったら結構重くなるだろ。

666:デフォルトの名無しさん
08/12/21 20:34:10
>>663
これは誤差範囲だと思います。一回しか測定してないので

>>662
-Q を試してみます。

#if 0 したりしていろいろ測定してみました。どうも、ASSERT_XXXXの個数と
だいたい相関があるようなので、1つ1つのコンパイルが遅いような気配です。
マクロの中身を減らせないかどうか検討中です。

667:デフォルトの名無しさん
08/12/21 20:35:40
アサートマクロの実装がマズかったりすんじゃないのかね。意外と。

668:デフォルトの名無しさん
08/12/21 20:37:50
>>664
プリプロセス後のコードは50k行程度です。
一般的に見て多いのか少ないのかよくわからないですが、
他の、数秒でコンパイルが終わるような同列のソースファイルも
行数はさほど変わらないので、行数そのものは関係ない気がしています

>>665
autoconfまかせだったので、-O2の最適化がかかってました。
テストコードだし、-O0にしてみます


669:デフォルトの名無しさん
08/12/21 20:40:14
>>668
ヘッダファイルの部分を除いた行はどのくらい?

あと、マクロは常に1行に展開されるので、
単に行数だけ見るより、バイト数見た方がいいかもしんない。

670:デフォルトの名無しさん
08/12/21 21:24:47
>>660
システムタイム大きすぎ!ほとんどI/Oだろ。
-vでcc1の引数見て、テンポリファイルの中見てみ。
超巨大になっているに違いない。
もしかしてtemplate引数に正定数の荒しで特殊化爆発?

671:デフォルトの名無しさん
08/12/22 00:29:25
-pipe してみて改善するようなら、特殊化の嵐でオブジェクトサイズがとんでもないことになってて
I/Oで時間喰ってるんじゃない?コンパイル中にメモリとスワップがどうなってるか見てもいいかも。
今時のマシンでcc1plusに80秒以上とか・・・。gccのinsn-*.cのコンパイルはそのくらいかかってたけど。

672:デフォルトの名無しさん
08/12/22 08:34:32
gdbでさ、

struct foo;
struct foo { ... };

と構造体の前方宣言があると、先に見つけた定義を見てしまって構造体の中身を
print でダンプできず <incomplete type> になってしまうのだけど、結局
これって解決不能なの?

毎回同じ構造の別名構造体をダミーで仕込んで、変数ごとにキャストして
アクセスとかって超面倒なんだけど。


673:670
08/12/22 09:53:03
まさに的を射たと思ったんだが反応がない(ワラ

674:デフォルトの名無しさん
08/12/22 15:45:05
>>673
反応遅れましたが、前にも書いているとおりテンプレート一切使ってないんです。
(boost::scoped_ptrは使ってますが、それはほかの異常ない部分でも一緒なので)

特定のどこかが遅いということではなく、調子のってマクロを使いすぎて
ソースの量が爆発しているような気配です。
地道にマクロを削って最適化を抑止して頑張ってます。

675:デフォルトの名無しさん
08/12/22 23:50:26
>>672
ちょっと簡単な例でやってみたら別に問題ない。 具体的なサンプルコードよろ。

676:デフォルトの名無しさん
08/12/23 00:02:54
gdbはinfoのどこかに、関数のプロトタイプ宣言書くなら、
ファイルのはじめの方に書きなと書いてあって笑った記憶があるが…

677:デフォルトの名無しさん
08/12/23 00:10:56
>>675
具体的なコードはちょっと出すの難しい。Linuxの動作を
gdb -c /proc/kcoreで追いかけてたら途中で<incomplete type>になる構造体が
出てきたという経緯で、自分のコードじゃないから。

- URLリンク(stackoverflow.com)
- URLリンク(sourceware.org)

あたりがソースかな。gdb struct incomplete type でググると同様の話がゾロゾロ出てくる。

678:デフォルトの名無しさん
08/12/23 01:16:19
>>677
- URLリンク(sourceware.org)

1998年? お前バカか? そんな古い断片の情報で>>672みたいな結論出すなよ。
その状況は今のgcc/ldでは起こらない問題。 >>675というのはカーネルモジュールとか
特殊なリンク環境で起こるんじゃないか? あと、

- URLリンク(stackoverflow.com)

は前方参照のことは何も書いてないぞ。 本当に>>677で見たコードには前方参照があったのか?
単にopaqueな参照だったんでは?

679:デフォルトの名無しさん
08/12/23 11:23:39
>>678
古い記事を出してしまったのはすまない。

最近(2006年あたり)でも類似の話があるので出してしまったのだけど、
ちょっと込み入った話なので質問撤回します。お騒がせしてすみません。


680:デフォルトの名無しさん
09/01/18 15:18:11
EclipseからMinGWを呼び出してC言語のプログラムを書いているのですが、
"-ansi"オプションを指定しても、なぜかC99の機能が使えて困っています。
具体的には、配列の動的確保がなぜかできます。(↓のような機能)

int i = 10;
int array[i];

他のC99の機能(新しいコメント分の書式やfor文での変数初期化)は無効になっていますので
これはバグなんでしょうか?
ちなみにgccのバージョンは、「gcc (GCC) 3.4.5 (mingw-vista special r3)」です。

681:デフォルトの名無しさん
09/01/18 15:34:24
>>680
-std=c89



最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch