問題タブ [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.

0 投票する
1 に答える
2236 参照

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が、効果がありませんでした。
0 投票する
1 に答える
452 参照

c# - C# stackalloc を使用して同じコード構造を維持する方法は?

MemReadメモリを読み取り、バイト配列を返すメソッドがあります

そして、変換を呼び出して実行するメソッドMemReadInt32MemReadBool、 ... があります。MemRead

ヒープではなくスタックにバッファを割り当てたいので、この行を変更します

スタックに割り当てられた配列は宣言スコープ外に公開できないため、コンパイラはエラーをスローします。これにより、ヒープへの潜在的な昇格を防ぐことができます。

しかし、その後、読み取りコードと同じメソッドに変換コードを配置する必要があります。MemReadInt32そして、読み取りコードは、 、MemReadBool、 ...ごとに繰り返されます。

コードを繰り返さReadMemずにスタック割り当てを取得するにはどうすればよいですか?