元スレGCCについて part8
gcc覧 / PC版 /みんなの評価 : ☆
1 = :
史上最強かもしれないツール、GCC(GNU Compiler Collection)について語るスレ。
GNU本家のGCCページ
http://gcc.gnu.org/
Binutils - Collection of binary utilities ←これも必要だぞ。
http://www.gnu.org/directory/GNU/binutils.html
GNU Binutils
http://sources.redhat.com/binutils/
GCC online documentation
http://gcc.gnu.org/onlinedocs/
Installing GCC
http://gcc.gnu.org/install/
GCC Timeline
http://gcc.gnu.org/releases.html#timeline
Calendar
http://gcc.gnu.org/develop.html#timeline
前スレ
GCCについて part7
http://pc11.2ch.net/test/read.cgi/tech/1145357824/l50
3 = :
>>1乙
4 = :
x86です。
double d = 0.3; int i;
i = d * 1000;
とすると i=299になります。
d = d * 1000; i = d;
とするとi=300になります。 Macのgccで試したら300になるので生成したコードを調べると
SSE2インストラクションを使ってました。試しに-msse2でコンパイルすると両方とも300に
なりました。 gccは3.2.2, 3.3.5, 4.1.1と試しましたが全部同じです。
manに書かれている以下の文が関係しているのでしょうか?
... -msse2 ...
The resulting code should be considerably faster in the major-
ity of cases and avoid the numerical instability problems of
387 code,
この問題をどこか詳しく説明している文書はありますでしょうか?
5 = :
x86は浮動小数点数レジスタが80ビットあり、演算はこの大きさで行われる
メモリに書き戻されるタイミングで64ビットに切り捨てられるのだが、
コンパイラの最適化の具合によって
メモリに書き戻されるタイミングが変わり、計算結果が変わることがある
6 = :
floatだと300になるんだよなぁ。
最初の方で
double d = 2.99999999999999988897769753748434595763683319092e-1;
float f = 3.00000011920928955078125e-1;
に変換されていた。
-O0だとハードウェアが使うそのままの形で渡すから、マシン依存ってことかな?
-O2だとmsse2じゃなくても300になった。
http://gcc.gnu.org/bugs.html#known だね。
gccはrtlとか出てきたらよく分からんなぁ。GIMPLEはわかりやすいんだが。。。
7 = :
GCC用のソースをVCでコンパイルできるようにしてたときにちょっと引っかかったんだけど、
構造体の初期化でメンバ名を指定できるのと、その他の初期値を指定できるなんて
初めて見たよ。
たしかに便利っちゃぁ便利だけど...
8 = :
全然普及しないC99
9 = :
>>5 >>6
大変参考になりました。 ありがとうございます!
10 = :
>>7
VCってC99サポートしてないの?
11 = :
してないよ
12 = :
低反発枕が凄い硬くて反発力が激しいのですが何とかなりませんか。
13 = :
知るか
14 = :
>>7
コンパウンドリテラル
15 = :
>>7
designated Initializerか
>>8にもあるけどC99で取り入れられてるな
17 = :
>>6
いや、0.3=3/10は2進数では無限小数になって丸め誤差が出ているだけでは?
0.3 = 0.10011001100110011001100…
19 = :
gccのプリプロセッサが、ヘッダファイルをどのディレクトリから探しているのか、探している様子を
画面表示するオプションは無いでしょうか?
gccの-iprefixオプションを使うと、途端にいくつかの標準ヘッダが見付からなくなる現象で悩んでます。
22 = :
コード生成以後もいろいろ大変なんだろうけど、
C++やJavaみたいに、言語規格自体が大きくて、
しょっちゅう変更される言語も含まれるから、
リリースがどんどん重くなりそうだね。
libstdc++なんか、言語処理系のバージョンとの関係が切り放せないし。
23 = :
C++は変更が2009年までに本当に終わるのかどうかが心配されているわけだが。。。
25 = :
デバッグ情報をどれだけ入れるかの違い。
28 = :
manにもinfoにも載ってないよ。
29 = :
構造体のパックってどうやるんですか
30 = :
パックしたい構造体に#pragma pack(1)を使う
33 = :
今時、構造体のパックして何するの?
34 = :
お肌にいい
35 = :
>>33
昔は必要だったの?
36 = :
>>33
余計なalignmentが入るのを防ぐ。
最初にデータ構造ありき、な時は必要でしょ。
ファイルフォーマットとかパケットの構造体作る時とか。
37 = :
そういうわけだから、今でも要るところには要る。
38 = :
アライメント違反でSIGBUSするCPUの場合はどうするの?
39 = :
>>38
ずっと前に、コンパイラがバイト単位での読み書きに翻訳してくれたりした覚えが
あるんだけど、今考えるとメンバ単体をポインタ経由でアクセスしたら死にそう。
40 = :
OSのカーネルがやってくれる場合もあるな。
でも、OSもコンパイラも面倒見てくれない環境もあるべ。
自分でバイト単位に書き込むのか?
41 = :
>>40
だれも面倒見てくれないんなら自分でやればいいだろ。
42 = :
>>40
trapで落ちてからか~、大昔からあるテクニックだけど今時のマシンでやったらstallしまくりでいやげだなぁ。
softfloatとかも便利だけど鈍いよね。
43 = :
>>42
だがそれがいい
44 = :
>>40
エミュするのめんどいんで、自力でなんとかしてくれ。
>>42
正確に数えたことないけど数十倍の時間がかかるはず。
根性でもう少し高速化できるかも知れんが、あくまで救済措置だからのう…
そんな所にエネルギー使いたくない。
47 = :
できないみたい
みんなの評価 : ☆
類似してるかもしれないスレッド
- GCCについて part9 (1001) - [95%] - 2011/9/2 21:17 ○
- GCCについて part10 (538) - [90%] - 2018/7/5 20:30
- Cygwin + MinGW + GCC 相談室 Part 8 (938) - [18446744073709551610%] - 2022/10/28 8:00
トップメニューへ / →のくす牧場書庫について