KO CSharp Memory Unsafe - LIHACHTETAN/ClassicUO-Bad-Newbie-CSharp-Scripts-IDE GitHub Wiki
ะฃะบัะฐัะฝััะบะฐ ยท ะ ัััะบะธะน ยท English ยท Deutsch ยท Franรงais ยท Italiano ยท Espaรฑol ยท ็น้ซไธญๆ ยท ๆฅๆฌ่ช ยท ํ๊ตญ์ด
Span<T> ๋ฐ ReadOnlySpan<T>๋ ๋ณต์ฌํ ํ์ ์์ด ๋ฉ๋ชจ๋ฆฌ์ ๋ํ ๋ณด๊ธฐ๋ฅผ ์ ๊ณตํฉ๋๋ค. ref-return ๋ฐ ref-๋ก์ปฌ ๋ณ์๋ฅผ ์ฌ์ฉํ๋ฉด ๊ธฐ์กด ์ ์ฅ ์์น๋ก ์์
ํ ์ ์์ต๋๋ค. ์ปดํ์ผ๋ฌ๋ ์ฐธ์กฐ์ ์๋ช
์ ์ ์ดํฉ๋๋ค. ref struct๋ ์ผ๋ฐ ํ ํ๋๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค. await ๋ฐ yield์ ๋ํ ์ ํ์ ํ์ฉ๋ ์๋ช
์ ๋ฐ๋ผ ๋ค๋ฆ
๋๋ค.
์ด ์์ ๋ฅผ 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 ํ์ต.