Skip to content

IT CSharp Memory Unsafe

Codex edited this page Oct 11, 2026 · 2 revisions

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

Memoria: ref, Span, ref struct e unsafe

Manuale C# · Esempi UO

Span<T> e ReadOnlySpan<T> danno una visione della memoria senza necessariamente copiare. ref-return e ref-variabile locale consentono di lavorare con una posizione di archiviazione esistente. Il compilatore controlla la durata dei riferimenti. ref struct non può essere utilizzato come un normale campo heap; i limiti attorno a await e yield dipendono dalla durata consentita.

Esempio semplice (Example.cs)

Salvare questo esempio separatamente come Example.cs. Eseguirlo indipendentemente dagli altri esempi di questa pagina.

Example.cs:

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

Risultato:

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 abilita puntatori e funzioni di memoria se la compilazione include AllowUnsafeBlocks. fixed mantiene l'indirizzo dell'oggetto spostato nella posizione desiderata. Queste sono funzionalità standard di C# e non un modo per aggirare le regole sulla proprietà del mondo di gioco.

// PROJECT-EXAMPLE
namespace UserTools;

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

Documentazione ufficiale: Memoria: ref, Span, ref struct e unsafe - Microsoft Impara.

Clone this wiki locally