問題タブ [stackalloc]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - このアンセーフ コードは .NET Core 3 でも動作するはずですか?
Span<T>
可能であればヒープ割り当てを回避するためにライブラリをリファクタリングしていますが、古いフレームワークもターゲットにしているため、いくつかの一般的なフォールバック ソリューションも実装しています。しかし今、私は奇妙な問題を発見しました。.NET Core 3 でバグを発見したのか、それとも私が何か違法なことをしているのかよくわかりません。
問題:
興味深いことに、ReinterpretOld
これは .NET Framework と .NET Core 2.0 でうまく動作します (したがって、私はこれで十分満足できます) が、それでも少し気になります。
ところで。ReinterpretOld
小さな変更により、.NET Core 3.0 でも修正できます。
私の質問:
これはバグですか、それともReinterpretOld
古いフレームワークで偶然に機能するのでしょうか? それらにも修正を適用する必要がありますか?
備考:
- デバッグ ビルドは .NET Core 3.0 でも機能します
- に申し込んでみまし
[MethodImpl(MethodImplOptions.NoInlining)]
たReinterpretOld
が、効果がありませんでした。
c# - C# stackalloc を使用して同じコード構造を維持する方法は?
MemRead
メモリを読み取り、バイト配列を返すメソッドがあります
そして、変換を呼び出して実行するメソッドMemReadInt32
、MemReadBool
、 ... があります。MemRead
ヒープではなくスタックにバッファを割り当てたいので、この行を変更します
に
スタックに割り当てられた配列は宣言スコープ外に公開できないため、コンパイラはエラーをスローします。これにより、ヒープへの潜在的な昇格を防ぐことができます。
しかし、その後、読み取りコードと同じメソッドに変換コードを配置する必要があります。MemReadInt32
そして、読み取りコードは、 、MemReadBool
、 ...ごとに繰り返されます。
コードを繰り返さReadMem
ずにスタック割り当てを取得するにはどうすればよいですか?