Skip to content

JA CSharp Memory Unsafe

Codex edited this page Oct 11, 2026 · 2 revisions

Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어

メモリ: ref、Span、ref struct、unsafe

マニュアルC# · 例題UO

Span<T> と ReadOnlySpan<T> は、必ずしもコピーすることなくメモリ全体を表示します。 ref-return 変数と ref-local 変数を使用すると、既存の保存場所を操作できます。コンパイラは参照の有効期間を制御します。 ref struct は通常のヒープ フィールドとして使用できません。 await と yield の周囲の制限は、許容される寿命によって異なります。

簡単な例 (Example.cs)

この例を Example.cs として別に保存し、このページの他の例とは独立して実行してください。

Example.cs:

// PROJECT-EXAMPLE
System.Span<int> values = stackalloc int[] { 2, 3 };
System.Console.WriteLine(values[0] + values[1]);

結果:

5
static int SumSmall()
{
    Span<int> values = stackalloc int[] { 1, 2, 3 };
    int total = 0;
    foreach (int value in values) total += value;
    return total;
}
UO.Print(SumSmall().ToString());

コンパイルに AllowUnsafeBlocks が含まれる場合、unsafe はポインターとメモリー関数を有効にします。 fixed は、目的の場所に移動されたオブジェクトのアドレスを保持します。これらは標準のC# 機能であり、ゲーム世界の所有権ルールを回避する方法ではありません。

// PROJECT-EXAMPLE
namespace UserTools;

public static class PointerExample
{
    public static unsafe int ReadLocal()
    {
        int value = 42;
        int* address = &value;
        return *address;
    }
}

公式ドキュメント: メモリ: ref、Span、ref struct および unsafe - Microsoft 学習。

Clone this wiki locally