私的良スレ書庫
不明な単語は2ch用語を / 要望・削除依頼は掲示板へ。不適切な画像報告もこちらへどうぞ。 / 管理情報はtwitterでログインするとレス評価できます。 登録ユーザには一部の画像が表示されますので、問題のある画像や記述を含むレスに「禁」ボタンを押してください。
元スレGCCについて part10
gcc スレッド一覧へ / gcc とは? / 携帯版 / dat(gz)で取得 / トップメニューみんなの評価 :
レスフィルター : (試験中)
>>349
いやいや、上から順で正しい。再走査はマクロ展開時の話だよ。
マクロ引数dataが展開された後に、その結果に対して再走査されて
普通の地の文と同じようにsがマクロ展開される。
最初のやつがうまく動かないのは、Cプリプロセッサは文字置き換えでなくて
トークンを置きえるから。
(6'(data)<<3) は (, 6, '(data)<<3) という3つのトークンになってしまう。
いやいや、上から順で正しい。再走査はマクロ展開時の話だよ。
マクロ引数dataが展開された後に、その結果に対して再走査されて
普通の地の文と同じようにsがマクロ展開される。
最初のやつがうまく動かないのは、Cプリプロセッサは文字置き換えでなくて
トークンを置きえるから。
(6'(data)<<3) は (, 6, '(data)<<3) という3つのトークンになってしまう。
dev/nullを出力先に指定するとscanfなどで入力した内容が表示されなくなるという噂を聞きました
どのように指定すると良いか教えてください
どのように指定すると良いか教えてください
>>355
入力した内容なら、必要に応じて"/dev/stderr"(stderr)にでも出力すればいいじゃん。
入力した内容なら、必要に応じて"/dev/stderr"(stderr)にでも出力すればいいじゃん。
>>355
scanf を実行する前に標準出力を /dev/null につけかえるのでは、pipe(), pipe2() とかで?
scanf を実行する前に標準出力を /dev/null につけかえるのでは、pipe(), pipe2() とかで?
>>357
意味不明
意味不明
>>357
はい、そのとおりです。
はい、そのとおりです。
>>357
pipe2はlinux専用関数だがな
pipe2はlinux専用関数だがな
>>360
ウイーンドーズにも/dev/nullがあるんですか?
ウイーンドーズにも/dev/nullがあるんですか?
察するに、パスワード入力ではechoさせたくないとかそれ系の話だろ?
普通はtermiosやSetConsoleModeでやることで、標準出力を/dev/nullに付け替えるなんて教えた奴は凄いんだか意地悪なんだか
普通はtermiosやSetConsoleModeでやることで、標準出力を/dev/nullに付け替えるなんて教えた奴は凄いんだか意地悪なんだか
int f(int n) { while (--n) ; return n}
がgcc -O2 (4.6.3)で
int f(int ) { retunr 0; }
のようにコンパイルされました。
この最適化がヒューリスティック(パターンデータベースのようなもの)を使っているのか
知りたいのですが、どのへんを調べればいいのでしょうか?
(質問の意図は、自作の最適化器にもこの手の処理をいれたいのですが、
場当たり的に入れるしかないのか、一般的な方法があるのかを知りたいということです。)
がgcc -O2 (4.6.3)で
int f(int ) { retunr 0; }
のようにコンパイルされました。
この最適化がヒューリスティック(パターンデータベースのようなもの)を使っているのか
知りたいのですが、どのへんを調べればいいのでしょうか?
(質問の意図は、自作の最適化器にもこの手の処理をいれたいのですが、
場当たり的に入れるしかないのか、一般的な方法があるのかを知りたいということです。)
ただの定数最適化に見える。
あなたのレベルを分かるようにしないと、ドラゴンブック読めとか言われちゃうよ。
あなたのレベルを分かるようにしないと、ドラゴンブック読めとか言われちゃうよ。
>>366
なんか見当違いなレスだなぁ
なんか見当違いなレスだなぁ
すいません。ドラゴンブックは学生時代に買って眺めたことはあります。専攻はコンピュータ科学でした。
コンパイラ関係はあまり深く学ばなかったとの、なにぶん10年以上のブランクがあるので、
どの程度の難しさの問題なのかもわからないのです。
定数最適化、なんでしょうか?
while文が終わるとすれば0しかありえないですが、while文の停止性まで最適化器が判断できるのか疑問だったのです。
追伸:
int f(int n) { while (n=n-2) {} return n; } main() { f(-2); }
とかだとnの偶奇(もっと一般のケースもいけるみたいです)で結果を変えるようです。
-O0 と -O2 で実行時間が全然違ってしまいますが速くなる分にはいいんですよね。
コンパイラ関係はあまり深く学ばなかったとの、なにぶん10年以上のブランクがあるので、
どの程度の難しさの問題なのかもわからないのです。
定数最適化、なんでしょうか?
while文が終わるとすれば0しかありえないですが、while文の停止性まで最適化器が判断できるのか疑問だったのです。
追伸:
int f(int n) { while (n=n-2) {} return n; } main() { f(-2); }
とかだとnの偶奇(もっと一般のケースもいけるみたいです)で結果を変えるようです。
-O0 と -O2 で実行時間が全然違ってしまいますが速くなる分にはいいんですよね。
GCCはどうだか知りませんのでドラゴンブックレベルの一般論ですが、
ループ最適化は普通にやるので、条件式は判断します。
制約条件がそこではっきりするので最終的には通常の定数最適化
パスで消えてるんじゃないでしょうか。
ドラゴンブックに書いてなかったっけ?
停止性が判断できるかという疑問ですが、判断できなければ
最適化はやらないということになるはずです。
逆に聞きたいのですが、ヒューリスティックに何かできる
んでしょうか? 実行時判断みたいなもの?
ループ最適化は普通にやるので、条件式は判断します。
制約条件がそこではっきりするので最終的には通常の定数最適化
パスで消えてるんじゃないでしょうか。
ドラゴンブックに書いてなかったっけ?
停止性が判断できるかという疑問ですが、判断できなければ
最適化はやらないということになるはずです。
逆に聞きたいのですが、ヒューリスティックに何かできる
んでしょうか? 実行時判断みたいなもの?
前半はなんとなくわかりました。ドラゴンブックは多分実家にあるので参照できませんが、、、
後半ですが、誤用かもしれませんが経験則の意味で使いました。
停止性は当然一般には判断できないので、どんな経験則を使ってるのかな、ってぐらいで、
深い意味はなかったです。
後半ですが、誤用かもしれませんが経験則の意味で使いました。
停止性は当然一般には判断できないので、どんな経験則を使ってるのかな、ってぐらいで、
深い意味はなかったです。
>>365
ブロック内の変数に関数外の部分から影響を受けるかどうか(volatileやrestrictじゃないメモリ参照とか)のフラグを用意して、
外部の影響を受けない変数や定数から構成された条件式は停止時の条件が計算できる可能が高いので最適化を試みるとか。
似たような考え方でブロックが(大域変数などに)副作用を与えるかどうかを判断すれば簡略化やコードの削除ができるんじゃない?
ブロック内の変数に関数外の部分から影響を受けるかどうか(volatileやrestrictじゃないメモリ参照とか)のフラグを用意して、
外部の影響を受けない変数や定数から構成された条件式は停止時の条件が計算できる可能が高いので最適化を試みるとか。
似たような考え方でブロックが(大域変数などに)副作用を与えるかどうかを判断すれば簡略化やコードの削除ができるんじゃない?
>>365
l1: --n;
if (n != 0) goto l1;
return n;
不変式解析で、
l1: --n;
if (n != 0) goto l1;
return 0;
nの非到達性で、
return 0;
l1: --n;
if (n != 0) goto l1;
return n;
不変式解析で、
l1: --n;
if (n != 0) goto l1;
return 0;
nの非到達性で、
return 0;
>>375
おもしろそうですね
おもしろそうですね
libdwarfがELFに依存してて泣ける…
Windows(MinGW)だとPE+DWARFだから使えないのが残念
MinGWのobjdump.exeは自力で解析してるから、ソースを参考にすれば
なんとかなりそうだけどDWARFの知識が必要になるし…
Windows(MinGW)だとPE+DWARFだから使えないのが残念
MinGWのobjdump.exeは自力で解析してるから、ソースを参考にすれば
なんとかなりそうだけどDWARFの知識が必要になるし…
libdwarfをPE対応にしてupstreamにパッチ投げれば
他の人も幸せになれるんでないの
他の人も幸せになれるんでないの
正直libdwarf内で最低限のELFエミュレーションをしようと思ってソース
見たけどめげた…ごめんよ
とりあえずobjdump.exeがやってるDWARF解析部分を解析してみるよ
それでDWARFになじんだらまたトライしてみたい
見たけどめげた…ごめんよ
とりあえずobjdump.exeがやってるDWARF解析部分を解析してみるよ
それでDWARFになじんだらまたトライしてみたい
どうでもいいがCentOS最近入れたらデフォルトではインスコされてないんだな
gccのないLinuxなんてLinuxじゃないやい
gccのないLinuxなんてLinuxじゃないやい
CentOSのGCCは糞古いから最初から入ってなくても問題無い
ただ新しいのを入れるには色々手間は掛かる
ただ新しいのを入れるには色々手間は掛かる
>>389
やぁ 先輩
やぁ 先輩
>>394
「ロボットじゃないよ,アンドロイドだよ」って応えないと
「ロボットじゃないよ,アンドロイドだよ」って応えないと
何を言ってる。
あれは立派なロボだ。設計図を知らんのか。
あれは立派なロボだ。設計図を知らんのか。
類似してるかもしれないスレッド
- GCCについて part8 (763) - [90%] - 2009/3/11 8:47 ☆
- GCCについて part9 (1001) - [90%] - 2011/9/2 21:17 ○
- 【激遅】AppleGCC【絶望】 (111) - [18446744073709551609%] - 2010/1/15 10:31
トップメニューへ / →のくす牧場書庫について