アカウント名:
パスワード:
- if (t > 16)+ if (t > 18)
sizeof ttab / sizeof(char*)
sizeof(char *) = 3sizeof(ttab) = 4の倍数
奇数番地からのアクセスを許さないCPUはありますね(本当)。例のプログラムは、そこまで考え抜かれて作られたものだったわけです(嘘)。
A constant expression is an expression that involves only constants. Such expressions may be evaluated during compilation rather than run-time, and accordingly may be used in any place that a constant can occur,
malloc( sizeof(char*) * n )
たしかに今のコードは誰も読んでいないようだな。
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
にわかな奴ほど語りたがる -- あるハッカー
確かに誰も読んでいないようだな (スコア:2, すばらしい洞察)
/*
* Convert an ICMP "type" field to a printable string.
*/
char *
pr_type(register u_char t)
{
static char *ttab[] = {
"Echo Reply", "ICMP 1", "ICMP 2", "Dest Unreachable",
"Source Quench", "Redirect", "ICMP 6", "ICMP 7",
"Echo", "ICMP 9", "ICMP 10", "Time Exceeded",
"Param Problem", "Timestamp", "Timestamp Reply", "Info Request",
"Info Reply"
};
if (t > 16)
return("OUT-OF-RANGE");
return(ttab[t]);
}
Re:確かに誰も読んでいないようだな (スコア:1, 参考になる)
Re:確かに誰も読んでいないようだな (スコア:0)
Re:確かに誰も読んでいないようだな (スコア:0)
あくまで一般的な例では
1.その手の定型文を使い慣れていなかった。
2.単に面倒だった。(or 時間が無かった)
3.コンパイラによっては割り算が入るので遅くなる。
(最適化がコンパイラ任せというのは好まない)
4.仕様が定まっていなかったので有効なのは途中までだった。
あたりかと。
Re:確かに誰も読んでいないようだな (スコア:0, 余計なもの)
>3.コンパイラによっては割り算が入るので遅くなる。
> (最適化がコンパイラ任せというのは好まない)
実行時の演算結果に影響しない定数式はコンパイル時に計算されますよ。
こういう人はC++がものすごく遅い言語だと思っているんでしょうね。Kernel Sourceを読む前にCompiler Sourceを読んだ方がいいかもw
Re:確かに誰も読んでいないようだな (スコア:0)
Re:確かに誰も読んでいないようだな (スコア:0)
何十年前のコンパイラですか・・・
いまどき、このコードで実行時の除算が生成されるなんて、びっくりです。
件のソースがコンパイル可能で、かつそのようなコードを生成する処理系をご存知ならば、参考までにお教え願いたい。
Re:確かに誰も読んでいないようだな (スコア:0)
たとえばyaccでほげってでっちあげた処理系とか。
本筋に戻ると とするとバイト境界をそろえるためにパディングを入れたときに困るでしょ。
Re:確かに誰も読んでいないようだな (スコア:0)
Re:確かに誰も読んでいないようだな (スコア:0)
えーなんか困りますか? 解説キボン
Re:確かに誰も読んでいないようだな (スコア:0)
Re:確かに誰も読んでいないようだな (スコア:0)
Re:確かに誰も読んでいないようだな (スコア:0)
ポインタが24bit長で、16bit単位でアクセスを行うRAMが繋がっているために配列に1バイトパディングする。
メモリの利用効率は悪化するけどな。
Re:確かに誰も読んでいないようだな (スコア:0)
Re:確かに誰も読んでいないようだな (スコア:0)
奇数番地からのアクセスを許さないCPUはありますね(本当)。例のプログラムは、そこまで考え抜かれて作られたものだったわけです(嘘)。
Re:確かに誰も読んでいないようだな (スコア:0)
きりがないので、「sizeof ttab / sizeof(char*)」や「sizeof ttab / sizeof ttab[0]」が誤った結果を返す、
具体的なアーキテクチャ名を例示いただけるとありがたいです。
Re:確かに誰も読んでいないようだな (スコア:0)
Re:確かに誰も読んでいないようだな (スコア:1)
# 不当マイナスモデ希望w
>言語の仕様書
K&R 2ndを調べました。 とあり、mayなので仕様的には決まってないです。やっぱりコンパイラのソースを読むしか。
ちなみにLSI-C 3.30c試食版で動作を確認してみたら、定数式はコンパイル時に計算されていました。
ポインタのパディングは実際どうなんでしょ。 もできないわけで、そんな怖い処理系が実在するんでしょうか?
Re:確かに誰も読んでいないようだな (スコア:0)
- "Info Reply"
+ "Info Reply", "Mask Request", "Mask Repl
と合わせてのパッチだから本質的に意味のない話だよ。
Re:確かに誰も読んでいないようだな (スコア:1)
引用されているのは IPv4 用の traceroute のコードの一部ですよね。少なくとも FreeBSD [freebsd.org] ではこの通りのコードが使われているようです。
鵜呑みにしてみる?
Re:確かに誰も読んでいないようだな (スコア:0)
アドレスが0始まりなので、Info Replyは16番目だが、
引数で 16 を渡してもOUTRANGEになる。
ただ、RFC的にはInfomation Reply は廃止されているので、call元が使っていないならば、Info Replyを
必要としていないので、問題が表面化しない と言う事かと。
#でも 17番目と18番目が RFC792では無く、RFC 950で提唱
#されいるのが対応していないようですが。
Re: 確かに誰も読んでいないようだな (スコア:1)
往々にして、しっかりサポートしている機器が残っている、Internetのどっかには。
と、いう可能性には十分注意が必要です。
(古ーいバージョンのsendmail然り。)
Re:確かに誰も読んでいないようだな (スコア:0)
ならんでしょ。