KO CSharp Memory Unsafe - LIHACHTETAN/ClassicUO-Bad-Newbie-CSharp-Scripts-IDE GitHub Wiki

ะฃะบั€ะฐั—ะฝััŒะบะฐ ยท ะ ัƒััะบะธะน ยท English ยท Deutsch ยท Franรงais ยท Italiano ยท Espaรฑol ยท ็น้ซ”ไธญๆ–‡ ยท ๆ—ฅๆœฌ่ชž ยท ํ•œ๊ตญ์–ด

๋ฉ”๋ชจ๋ฆฌ: ref, Span, ref struct ๋ฐ unsafe

์„ค๋ช…์„œ C# ยท ์˜ˆ์‹œ UO

Span<T> ๋ฐ ReadOnlySpan<T>๋Š” ๋ณต์‚ฌํ•  ํ•„์š” ์—†์ด ๋ฉ”๋ชจ๋ฆฌ์— ๋Œ€ํ•œ ๋ณด๊ธฐ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ref-return ๋ฐ ref-๋กœ์ปฌ ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ธฐ์กด ์ €์žฅ ์œ„์น˜๋กœ ์ž‘์—…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ์ฐธ์กฐ์˜ ์ˆ˜๋ช…์„ ์ œ์–ดํ•ฉ๋‹ˆ๋‹ค. 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());

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 ํ•™์Šต.

โš ๏ธ **GitHub.com Fallback** โš ๏ธ