アカウント名:
パスワード:
C#は、整数の配列さえオブジェクトとする(ヒープを割り当てる)言語なので、OSというパフォーマンスが要求されるソフトの開発には向いていないと思っていたので驚いた。しかし、unsafe なコードを多用すれば、C#らしさが失われる代わりに、C言語並のことができるので、OSが作れたとしても特にすごくは無いのだが。
GCからのメモリ割り当ては、スタックからのメモリ割り当てと同じで、今ここと記録してある値を変えるだけでは?スタックポインタと違ってレジスタではないですが、ヒープに割り当てるのが遅い原因とはあまり思えません。むしろ、配列の境界チェックなどが遅さの原因と思います。
使用済み配列の開放もGCにやってもらわなければならないのがオーバーヘッドになる。構造体のメンバに配列がある場合、配列の実態は構造体とは別領域なので両方をコピーしないとならないのだが、つまりコピー用のメソッドを別途定義しなければならない。整数型の自動変数のノリで配列を使ってはならないのがC#。
今時の言語なら、使用済み配列の解放程度なら、ほとんど気にする必要ないくらいのオーバーヘッドじゃないかな。
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
目玉の数さえ十分あれば、どんなバグも深刻ではない -- Eric Raymond
unsafe は使っているのかね? (スコア:0)
C#は、整数の配列さえオブジェクトとする(ヒープを割り当てる)言語なので、OSというパフォーマンスが要求されるソフトの開発には向いていないと思っていたので驚いた。しかし、unsafe なコードを多用すれば、C#らしさが失われる代わりに、C言語並のことができるので、OSが作れたとしても特にすごくは無いのだが。
Re:unsafe は使っているのかね? (スコア:0)
GCからのメモリ割り当ては、スタックからのメモリ割り当てと同じで、今ここと記録してある値を変えるだけでは?
スタックポインタと違ってレジスタではないですが、ヒープに割り当てるのが遅い原因とはあまり思えません。
むしろ、配列の境界チェックなどが遅さの原因と思います。
Re:unsafe は使っているのかね? (スコア:1)
使用済み配列の開放もGCにやってもらわなければならないのがオーバーヘッドになる。構造体のメンバに配列がある場合、配列の実態は構造体とは別領域なので両方をコピーしないとならないのだが、つまりコピー用のメソッドを別途定義しなければならない。整数型の自動変数のノリで配列を使ってはならないのがC#。
Re: (スコア:0)
今時の言語なら、使用済み配列の解放程度なら、ほとんど気にする必要ないくらいのオーバーヘッドじゃないかな。