[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 2chのread.cgiへ]
Update time : 04/02 10:40 / Filesize : 147 KB / Number-of Response : 682
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

GCCについて part8



1 名前:デフォルトの名無しさん mailto:sage [2007/10/13(土) 00:07:39 ]
史上最強かもしれないツール、GCC(GNU Compiler Collection)について語るスレ。

GNU本家のGCCページ
gcc.gnu.org/

Binutils - Collection of binary utilities ←これも必要だぞ。
www.gnu.org/directory/GNU/binutils.html

GNU Binutils
sources.redhat.com/binutils/

GCC online documentation
gcc.gnu.org/onlinedocs/

Installing GCC
gcc.gnu.org/install/

GCC Timeline
gcc.gnu.org/releases.html#timeline

Calendar
gcc.gnu.org/develop.html#timeline

前スレ
GCCについて part7
pc11.2ch.net/test/read.cgi/tech/1145357824/l50

642 名前:デフォルトの名無しさん mailto:sage [2008/11/22(土) 12:58:43 ]
>>603-604
じゃあコンパイラとしての能力には深刻な問題があるわけではない?

643 名前:デフォルトの名無しさん mailto:sage [2008/11/22(土) 18:48:12 ]
>>642
pchの問題は4.3だと解決してるみたい。

644 名前:デフォルトの名無しさん mailto:sage [2008/11/25(火) 20:34:44 ]
OS CentOS4.6 i386
gcc 3.4.6

やりたいこと
binutils-2.10.tar.gz
gcc-2.95.2.tar.gz
glibc-2.1.3-armlinux.tar.gz
を使ってクロス環境を作りたい

bintilをビルドする時に
./configreでホストのタイプを設定したいのですが、Centの場合
--host=i386-unknown-linux
でいいのでしょうか?

645 名前:デフォルトの名無しさん mailto:sage [2008/11/25(火) 20:42:29 ]
binutilsとgccはとくにhostの指定はしなくてもいいけど

646 名前:デフォルトの名無しさん mailto:sage [2008/12/01(月) 12:39:07 ]
書くとすれば、i386-pc-linux-gnu だよな。



647 名前:デフォルトの名無しさん mailto:sage [2008/12/01(月) 17:08:01 ]
gcc -dumpmachine

648 名前:デフォルトの名無しさん mailto:sage [2008/12/18(木) 01:48:00 ]
OS:CentOS
コンパイルすると
無効なプリプロセスディレクティヴ #!
ってでるんだ 誰か解決策を教えてください。

649 名前:デフォルトの名無しさん mailto:sage [2008/12/18(木) 02:09:29 ]
エスパー求む

650 名前:デフォルトの名無しさん mailto:sage [2008/12/18(木) 02:23:45 ]
シェルスクリプトをコンパイルしてはいけません



651 名前:デフォルトの名無しさん mailto:sage [2008/12/18(木) 02:28:22 ]
実は1行目が#!ccだったりしてw

652 名前:デフォルトの名無しさん mailto:sage [2008/12/21(日) 15:44:40 ]
g++のコンパイルが異常に遅くなってしまってるんですが、
何がボトルネックになっているのかを調べる(コンパイラ自身のプロファイルみたいなの)
はありますか?

コンパイルしているのは、ユニットテスト的なテストプログラムで、
長さも100行程度です。ひたすら関数の結果をチェックしまくるみたいなもので、
マクロを使いまくっているんですがそれが原因かなぁ・・・

653 名前:デフォルトの名無しさん mailto:sage [2008/12/21(日) 15:45:39 ]
書き忘れましたが、その100行程度のユニットテストプログラムで、
コンパイルには3分くらいかかってます。

本体プログラムよりはるかに長い・・・orz

654 名前:デフォルトの名無しさん mailto:sage [2008/12/21(日) 15:51:45 ]
可能なら前半と後半で2つのモジュールに分けて、どっちで遅くなるか調べる。
それを繰り替えして突き止めるとか。最終手段かもだが。

655 名前:デフォルトの名無しさん mailto:sage [2008/12/21(日) 16:01:17 ]
-Eだとどれくらいかかってるんだろ?

656 名前:デフォルトの名無しさん mailto:sage [2008/12/21(日) 16:08:56 ]
1. -E, -S, -cでそれぞれの時間を確かめる。
2. cc1内部は-fdump-rtl-allで出力ファイルのタイムスタンプを見る

657 名前:デフォルトの名無しさん mailto:sage [2008/12/21(日) 16:32:33 ]
>>654 >>655 >>656
あざっす。いまからいろいろ調べてみます。

658 名前:デフォルトの名無しさん mailto:sage [2008/12/21(日) 17:10:27 ]
templateでたらいまわし関数みたいなものを作っているとかだったり。

659 名前:デフォルトの名無しさん mailto:sage [2008/12/21(日) 17:21:19 ]
>>658
テンプレートをガンガン使ってるなら、まぁ遅くなっても納得するんですが・・・

コンパイルしているプログラムが、
ASSERT_TRUE( .xxxx )
ASSERT_TRUE( yyyy )
みたいなものが延々と続いているだけのプログラムなので不可解なのです

660 名前:デフォルトの名無しさん mailto:sage [2008/12/21(日) 18:25:36 ]

time コマンドで実行時間を測定しました。

-c  81.34s user 12.30s system 97% cpu 1:35.78 total
-S  82.63s user 11.62s system 99% cpu 1:34.66 total
-E  0.36s user 0.17s system 99% cpu 0.533 total

それぞれ一回しかやってないのでちょっと揺れがありますが…
つまり-Eは一瞬で、asに時間がかかっているという解釈で正しいんでしょうか?

ひょっとしてプリプロセッサによってファイルが膨れ上がっているのかとも思いましたが、
他のファイルでも-E 後の行数はほぼ同じだったので、単純に行数が原因ではないようです。
(すべて 50k〜60k行の範囲内)

次に-fdump-rtl-allを付けてコンパイルしようとしましたが…
ディスク領域不足でコンパイル中断しましたとか出る上に30分経ってもまだ終わらない…



661 名前:デフォルトの名無しさん mailto:sage [2008/12/21(日) 18:30:50 ]
アサートの数を減らしてみて
どこを減らせばどのくらい時間が変わるか見てみたら?

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

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

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

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

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

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

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

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

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

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

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

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


669 名前:デフォルトの名無しさん mailto:sage [2008/12/21(日) 20:40:14 ]
>>668
ヘッダファイルの部分を除いた行はどのくらい?

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

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



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

672 名前:デフォルトの名無しさん mailto:sage [2008/12/22(月) 08:34:32 ]
gdbでさ、

struct foo;
struct foo { ... };

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

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


673 名前:670 mailto:sage [2008/12/22(月) 09:53:03 ]
まさに的を射たと思ったんだが反応がない(ワラ

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

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

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

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

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

- stackoverflow.com/questions/232744/how-to-print-incomplete-type-variable-in-gdb
- sourceware.org/ml/gdb/1998/msg00116.html

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

678 名前:デフォルトの名無しさん mailto:sage [2008/12/23(火) 01:16:19 ]
>>677
- sourceware.org/ml/gdb/1998/msg00116.html

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

- stackoverflow.com/questions/232744/how-to-print-incomplete-type-variable-in-gdb

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

679 名前:デフォルトの名無しさん mailto:sage [2008/12/23(火) 11:23:39 ]
>>678
古い記事を出してしまったのはすまない。

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


680 名前:デフォルトの名無しさん mailto:sage [2009/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 名前:デフォルトの名無しさん mailto:sage [2009/01/18(日) 15:34:24 ]
>>680
-std=c89







[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<147KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef