アカウント名:
パスワード:
私もその辺がよく分からないのですが、初期化されたか=保持されている値が有効か否かのフラグをアドレス値とは別に持たせるべきだったとでもいうのでしょうか?
初期化のために1bit犠牲にして、
そんな事をしたらアクセス出来るメモリが半分になってしまうか、ポインタを格納するのに2ワード必要になってしまいます。
それよりポインタを作成した時に、中身が自動的にNULLの値になっている様な言語仕様にした方が良いかと。実際、Javaが似た様な事をしてます(Javaにはポインタ自体は無いけどオブジェクトのレファレンスが似た様な格好なので)。
>アクセス出来るメモリが半分になってしまうか
一番上じゃなく一番下のBITをフラグに使えばいいじゃん。(今時の大抵のCPUは)メモリのアライメントとかごにょごにょしてるから、N(2とか4とか)で割り切れないアドレスのメモリは必ず「割り切れるアドレスなデータの続き」として扱う傾向が強い。1byte単位でイテレートして舐めるときならともかく、遠くから名指しで飛び込まれるときは必ずNで割り切れるアドレスだということになり、普通のポインタは下の1bitなり2bitなりが遊ぶことになる。
と、ruby(MRI)の解説の受け売りでした。4byte境界を前提とし、最下位BITが立っているものは小さいInt、最下位は寝てるけどその次が起きてる奴はSymbolの内部番号、に割り当ててるんだってね。もちろん両方寝てる奴は普通のObjectを参照。
#これが出来ないくせに普通に性能出てるJRubyナニモノ?ていうか逆にいえばそれに時々負けるMRIって何?
1byte単位でイテレートして舐めるときならともかく、
ともかくじゃねーだろwww
char *p = buff;
while (*p++!='\0') {なんとか}
みたいな処理は「ともかく」でごまかせるほどレアな処理だと思ったか?
1bitなんて使わなくても0 = NULL1 = 未初期化それ以外 = 有効なポインタみたいなのでいいじゃない。Win32APIにもINVALID_HANDLE_VALUEとかありますし。
1bit犠牲にする意味は?そうするぐらいならNULLなら参照禁止でいいじゃない。
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
Stay hungry, Stay foolish. -- Steven Paul Jobs
NULLがない世界 (スコア:0)
# え?NULLがあっても、NULLなんかでは初期化しませんか。そうなんですか。
Re: (スコア:0)
私もその辺がよく分からないのですが、
初期化されたか=保持されている値が有効か否かのフラグを
アドレス値とは別に持たせるべきだったとでもいうのでしょうか?
Re:NULLがない世界 (スコア:0)
初期化状態では参照禁止、
参照するためには有効な値を入れてください。
使い終わったら再初期化して参照禁止にできます。
というような感じになるのではないでしょうか。
Re:NULLがない世界 (スコア:1)
そんな事をしたらアクセス出来るメモリが半分になってしまうか、ポインタを格納するのに2ワード必要になってしまいます。
それよりポインタを作成した時に、中身が自動的にNULLの値になっている様な言語仕様にした方が良いかと。実際、Javaが似た様な事をしてます(Javaにはポインタ自体は無いけどオブジェクトのレファレンスが似た様な格好なので)。
Re: (スコア:0)
>アクセス出来るメモリが半分になってしまうか
一番上じゃなく一番下のBITをフラグに使えばいいじゃん。
(今時の大抵のCPUは)メモリのアライメントとかごにょごにょしてるから、N(2とか4とか)で割り切れないアドレスのメモリは必ず「割り切れるアドレスなデータの続き」として扱う傾向が強い。1byte単位でイテレートして舐めるときならともかく、遠くから名指しで飛び込まれるときは必ずNで割り切れるアドレスだということになり、普通のポインタは下の1bitなり2bitなりが遊ぶことになる。
と、ruby(MRI)の解説の受け売りでした。4byte境界を前提とし、最下位BITが立っているものは小さいInt、最下位は寝てるけどその次が起きてる奴はSymbolの内部番号、に割り当ててるんだってね。もちろん両方寝てる奴は普通のObjectを参照。
#これが出来ないくせに普通に性能出てるJRubyナニモノ?ていうか逆にいえばそれに時々負けるMRIって何?
Re: (スコア:0)
ともかくじゃねーだろwww
char *p = buff;
while (*p++!='\0') {
なんとか
}
みたいな処理は「ともかく」でごまかせるほどレアな処理だと思ったか?
Re: (スコア:0)
Re:NULLがない世界 (スコア:1)
1bitなんて使わなくても
0 = NULL
1 = 未初期化
それ以外 = 有効なポインタ
みたいなのでいいじゃない。Win32APIにもINVALID_HANDLE_VALUEとかありますし。
Re: (スコア:0)
1bit犠牲にする意味は?
そうするぐらいならNULLなら参照禁止
でいいじゃない。