2012年2月29日水曜日

C#でポインタを使う

覚書

C#ではポインタが使えない
じゃぁどうするか

Cと同じように
byte data;
byte *p = &data;
というコードは使えない
んで
unsafeというオプションを使う
直訳すると「危険なコード」


unsafe void 関数名(引数) { ... }
とかじゃなくても 必要なところだけunsafe { ... } とするだけでいいみたい

んで それだけでもダメらしい

fixed ってのを使う
.Netはメモリを自動的に最適化して
移動したり消去したりするので
ポインタをいざ使おうとすると移動してたり消えてたりする可能性がある
ってことでそうならないために
fixedを使う

byte data;
fixed (byte* p = &data) {
   ...
}
みたいなかんじ
fixedのブロックの中ではメモリが移動したり消えたりすることは無い
(はず 確認はしてない)

んで! それだけでもダメなんよ!!!
C#めんどくせぇよ

「危険なコードを実行するよ!」
って予め大声で宣言しないとダメ

プロジェクトのプロパティで
「アンセーフ コードの許可」
をチェックしないとダメ
これでやっとポインタを使うことができる

うーん めんどくせぇなぁ…
ポインタを使わないのが一番なのかもしれないけど
でも あの便利なのを経験するとなぁ


Cで突っかかるのはポインタ ってよく言うけど
僕はあまりポインタで苦労したことはないなぁ
まぁあまり使ってないから便利な使い方はしてないだろうけど


ということで C#でポインタを使う 覚書でした

0 件のコメント:

コメントを投稿