ここでは、C#の安全でない機能を使用しようとしています:http://ideone.com/L9uwZ5
私は、C#でのそのような方法が最悪であることを知っています。そして、このトピックにいくつかの情報があることを認めたいと思います。「倒錯」という言葉を見てください。
純粋なCの方法(C ++でさえも)のようにC#でクイックソートを実装したいと思います。クレイジーかもしれませんが、安全でないC#の可能性を深く調べたいだけです。
私はいつもstackalloc演算子を使おうとしていました。これはヒープからではなくスタックからの割り当てであることがわかっているため、プログラムの実行に失敗します。
しかし、このプログラムで例外/エラーが見られなかったとき、私は混乱しました。
- 明示的な例外/エラーが発生しなかったのはなぜですか?
また、コードのコメント部分を見ると、次のようになります。
struct Header
{
internal int* data;
};
Header* object_header = stackalloc Header[sizeof(Header)];
object_header->data = stackalloc int[length];
最後の行でコンパイルできません。C#コンパイラは、この式ではstackallocを使用できなかったことを通知します。なんで?データはint *型ですが、なぜここでエラーが発生したのですか?
スタックフレームだけを使用し、ヒープは使用しないようにします。別の方法があることは知っていますが、それはヒープからの割り当てです。
int*[] data = new int*[length * sizeof(int)];
IntPtr result = Marshal.AllocHGlobal(Marshal.SizeOf(length * sizeof(int)));
Marshal.WriteInt32(result, 0);
for(int i = 0; i < length * sizeof(int); i++) d[i] = (int*)result;
たとえば、スタック割り当てではありません。
C#言語のスタック割り当てとpure-Cスタイルの構文を使用して、倒錯タスクを明示的に解決するにはどうすればよいですか。
そのC#はそのような目的のために作成されたものではなく、そのような機能はばかげています-私は知っていますが、主な質問は重要性についてではなく、そのような機能についてです。