Skip to content

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-повернення та ref-локальна змінна дозволяють працювати з існуючим місцем зберігання. Компілятор контролює час життя посилань. ref struct не може використовуватись як звичайне heap-поле; обмеження близько 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());

unsafe дозволяє вказівники та функції роботи з пам'яттю, якщо компіляція включає AllowUnsafeBlocks. 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 Learn.

Clone this wiki locally